簡體   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