繁体   English   中英

Laravel Sanctum 在不创建新令牌的情况下检索 PlainTextToken

[英]Laravel Sanctum Retrieve PlainTextToken without creating a new token

我正在用 vue 和 laravel 创建一个 SPA。 我知道我可以为每个用户发出令牌并将其作为新条目存储在数据库中。 从文档中,我只能使用 laravel 以散列格式列出用户可用的所有令牌,并且无法从 eloquent 查询访问属性$token->plainTextToken 我同时使用普通身份验证和密室身份验证,有时我需要将令牌返还给用户。 我必须在每次页面刷新时发出新令牌,还是有办法解决这个问题?

我不知道我是否正确理解你的问题。 但是您是否打算在身份验证后向用户发出令牌?

正如您正确所述,令牌存储在数据库中。 但是存储的是散列副本。 创建令牌的那一刻,您可以调用 plainTextToken 属性来获取未散列的令牌副本。 这是您的 vue 应用程序应在每个请求期间发送以进行授权的一个。

$token = $user->createToken('token-name')->plainTextToken;

这个令牌值是应该发给你的 vue 应用程序以便随后存储和使用的值。

其次,将返回的 $token 值(如 Laravel <= 8.**)可能包含表的 id 和令牌的未散列副本。 例如

4|92paqtuqnd92920101ijdkksksn

您将分解该字符串并仅在管道符号之后发送值。 那里的第一个值仅显示表行的 id。

最后,我不明白为什么每次页面刷新后都需要发出新令牌。 也许我没有正确理解你的问题。 但是你可以简单地在你的响应中将令牌传递回你的 vue 应用程序,或者如果它是一个同步请求,你可以将它存储在会话中并在需要时获取它。

有一种方式我认为像不记名令牌

        $token = null;
        $headers = apache_request_headers();
        if(isset($headers['Authorization'])){
            if (strpos($headers['Authorization'], 'Bearer') !== false) {
                $token = str_replace('Bearer ', '',$headers['Authorization']);
            }
        }

它将返回给定的令牌

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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