繁体   English   中英

Laravel JWT AUTH 仅返回 TRUE/FALSE

[英]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}

我该如何解决? 这是一个两难的选择。

我的完整代码在这里https://github.com/sksmsWKd/MetaComposerProto

设置应用程序的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM