Laravel JWT AUTH只返回TRUE/TRUE

flvtvl50  于 2023-11-20  发布在  其他
关注(0)|答案(3)|浏览(103)

如果我这样设置auth.php-->>

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

字符串
登录维护,如果我去主页,并返回令牌只有真/假值这样的{“access_token”:true,“token_type”:“bearer”,“expires_in”:3600}
如果我设置了auth

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


登录不能维持当我去主页,但令牌将返回罚款一样
{“access_token”:eY ....bla bla.....,“token_type”:“bearer”,“expires_in”:3600}
怎么解决呢?进退两难啊。

epggiuax

epggiuax1#

编辑config/auth.php

return [

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

];

字符串

return [

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

];

4xrmg8kj

4xrmg8kj2#

设置应用的Laravel身份验证有几个要求。
您似乎选择了Sanctum作为您的身份验证提供程序。

编辑:我似乎忽略了一个事实,即用户使用的是Tymon/JWT-Auth而不是Passport/Sanctum。请参阅下面我的拆分答案。

根据sancutum文档,您需要将HasApiTokens特征添加到您的User模型类(您的用户模型缺少此特征)。
(For Tymon/JWT-Auth,您需要遵循他们对用户模型的documentation要求。)
此外,在您的应用程序/Http/控制器/AuthController. php中,
您的登录方法使用auth()->attempt()函数来验证用户的凭证是否与存储在数据库中的凭证一致。这个特殊的函数总是返回true/false,因此将结果存储在$token变量中并没有帮助,就像您下面所做的那样:

if (!$token = auth()->attempt($credentials)) {

字符串
您需要做的是:

对于护照/圣诞老人:

检查attempt()是否成功(即,将其 Package 在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);
}

对于TYMON/JWT-授权:

Tymon/Jwt-Auth通过在成功时返回标记或在失败时返回false来改变attempt()函数的工作方式,因此,将login()代码更改为:

$token = auth()->attempt($credentials);
if($token === false){
    return response()->json(['error' => 'Unauthorized'], 401);
}
return $this->respondWithToken($token);

**其他用户注意:**我已经使用了sksmsWKd的自定义respondWithToken Package 函数来返回令牌,但显然,您可以根据需要只返回$token本身。

return response()->json(['token' => $token]);


对于你的config/auth.php配置,将默认的保护设置为“web”是非常标准的。web保护在应用导航期间使用cookie来跟踪访问令牌。
希望以上内容对您有所帮助。
此致,
弗里茨。

xdyibdwo

xdyibdwo3#

如果你返回true/false,代码如下:

$token = auth()->attempt($credentials);

字符串
请在terminal/cmd中输入此命令:

php artisan optimize

相关问题