我正在使用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',
],
],
2条答案
按热度按时间yiytaume1#
这似乎有点老了,但只是为了让其他人受益。
我确信你没有在你的
User
模型中从Laravel\Passport\HasApiTokens
导入HasApiTokens
trait。考虑添加命名空间
并在类块内部的顶部添加这一行
对于新的laravel应用程序,这已经完成了,但是已经从sanctum导入为
Laravel\Sanctum\HasApiTokens
,它没有token()
方法。如果是这样,只需将
use Laravel\Sanctum\HasApiTokens
替换为use Laravel\Passport\HasApiTokens
即可tv6aics12#
因为它不在表中,当你dd(user)时,你会得到users表中的所有列,但在jwt中,你不必在数据库中存储token,你必须创建一个带有签名的代码...但是如果你想在数据库中保存token:创建一个表:jwt令牌列:用户ID、令牌、created_at...
我想你可以用“token "
dd(auth()->user()->token())或dd(auth()->user()->accessToken)