[英]Laravel JWT AUTH only returns TRUE/FALSE
如果我像这样设置 auth.php -->>
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
如果我 go 主页,则登录维护,并且返回令牌只是这样的真/假值 {"access_token":true,"token_type":"bearer","expires_in":3600}
如果我设置身份验证
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
当我 go 到主页时登录无法维护,但令牌会像
{"access_token":eY....bla bla.....,"token_type":"bearer","expires_in":3600}
我该如何解决? 这是一个两难的选择。
设置应用程序的 Laravel 身份验证有几个要求。
您似乎选择了 Sanctum 作为您的身份验证提供者。
根据sanctum 文档,您需要将 HasApiTokens 特征添加到您的用户 model class (您的用户 model 缺少此特征)。 此特征使您的 model 能够发出访问令牌(通过 createToken() 方法)
此外,在您的 app/Http/Controllers/AuthController.php 中,
您的登录方法使用 auth()->attempt() function 根据存储在数据库中的凭据来验证用户的凭据。 这个特殊的 function 将始终返回真/假,因此将结果存储在 $token 变量中无济于事,如下所示:
if (!$token = auth()->attempt($credentials)) {
你需要做的是:
检查尝试()是否成功(即,将其包装在 if/else 块中)然后自己发出访问令牌:
if (auth()->attempt($credentials)) {
$user = Auth::user();
$token = $user->createToken('Your Token Name');
return $this->respondWithToken($token);
} else {
return response()->json(['error' => 'Unauthorized'], 401);
}
其他用户注意事项:我使用了 sksmsWKd 的自定义 respondWithToken 包装器 function 来返回令牌,但显然您可以根据需要只返回 $token 本身。 IE:
return response()->json(['token' => $token]);
至于您的 config/auth.php 配置,将默认保护设置为“web”是非常标准的。 web 守卫使用 cookies 在应用程序导航期间拖着访问令牌。
希望以上对你有所帮助。
问候,
弗里茨。
编辑config/auth.php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
];
至
return [
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.