首页 > 解决方案 > Laravel Sanctum 在不创建新令牌的情况下检索 PlainTextToken

问题描述

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

标签: laravelvue.jsauthenticationlaravel-sanctum

解决方案


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

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

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

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

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

4|92paqtuqnd92920101ijdkksksn

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

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


推荐阅读