首页 > 解决方案 > 为什么我的身份验证令牌没有出现在身份验证用户对象中,即使它返回了身份验证令牌?

问题描述

我正在使用 Laravel Passport 进行用户登录。

accessToken 不会出现的原因可能是什么dd(auth('web')->user());?我需要的所有用户信息都出现在对象中,除了身份验证令牌。

之后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',
    ],
],

标签: phplaraveldebugging

解决方案


因为当你 dd( user ) 你得到 users 表中的所有列时它不在表中,但是在 jwt 中你不必将令牌存储在数据库中你必须创建一个带有签名的代码......但是如果你想在数据库中保存令牌:创建表:jwt 令牌列:用户 id、令牌、created_at ....

我认为你可以得到“令牌”

dd(auth()->user()->token()) 或 dd(auth()->user()->accessToken)


推荐阅读