php 为什么我的auth令牌没有显示在auth用户对象中,即使它返回一个auth令牌?

4sup72z8  于 12个月前  发布在  PHP
关注(0)|答案(2)|浏览(121)

我正在使用Laravel Passport进行用户登录。
accessToken不会在dd(auth('web')->user());上显示的原因是什么?我需要的用户的所有信息都出现在对象中,除了auth令牌。
dd($loginToken);上-我看到了令牌,因此我们可以排除令牌不存在的可能性。
可能是因为我使用的是auth('web')->user(),尽管我的项目是围绕使用api.php而不是web.php进行的?如果我把它切换到auth('api')->user(),我得到一个500错误,这似乎是一个奇怪的行为。
我感谢任何反馈和/或改进建议:)
下面是我的登录代码:

public function login(Request $request) {

$credentials = ['email' => $request->email, 'password' => $request->password];

if (Auth::guard('web')->attempt($credentials, false)) {
    $loginToken = auth('web')->user()->createToken('MyApp')->accessToken;
    dd(auth('web')->user());
    return response()->json([
        'message' => 'Successfully logged in',
        'loginToken' => $loginToken
    ]);
}

    return $this->sendError('Unauthorized.', ['error' => 'Unauthorized']);
}

以下是我的auth.php

'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],
yiytaume

yiytaume1#

这似乎有点老了,但只是为了让其他人受益。
我确信你没有在你的User模型中从Laravel\Passport\HasApiTokens导入HasApiTokens trait。
考虑添加命名空间

use Laravel\Passport\HasApiTokens;

并在类块内部的顶部添加这一行

use HasApiTokens

对于新的laravel应用程序,这已经完成了,但是已经从sanctum导入为Laravel\Sanctum\HasApiTokens,它没有token()方法。
如果是这样,只需将use Laravel\Sanctum\HasApiTokens替换为use Laravel\Passport\HasApiTokens即可

tv6aics1

tv6aics12#

因为它不在表中,当你dd(user)时,你会得到users表中的所有列,但在jwt中,你不必在数据库中存储token,你必须创建一个带有签名的代码...但是如果你想在数据库中保存token:创建一个表:jwt令牌列:用户ID、令牌、created_at...
我想你可以用“token "
dd(auth()->user()->token())或dd(auth()->user()->accessToken)

相关问题