簡體   English   中英

在護照 Laravel 中刷新令牌時出現 TokenMismatchException

[英]TokenMismatchException when refreshing token in passport laravel

我最近關注了關於如何在演示應用程序(博客)中正確安裝和設置 Laravel Passport 的官方文檔。

我的路線是按照以下說明設置的:

接下來,您應該在 AuthServiceProvider 的 boot 方法中調用 Passport::routes 方法。 此方法將注冊頒發訪問令牌和撤銷訪問令牌、客戶端和個人訪問令牌所需的路由:

在使用 Postman 運行一些示例請求時,我注意到oauth/token/refresh路由需要 CSRF 令牌。

運行工匠路線:列表我得到:

|        | POST     | oauth/token                             |                  | \Laravel\Passport\Http\Controllers\AccessTokenController@issueToken        | throttle     |
|        | POST     | oauth/token/refresh                     |                  | \Laravel\Passport\Http\Controllers\TransientTokenController@refresh        | web,auth     |

關於如何正確刷新令牌的任何想法?

https://laravel.com/docs/5.3/csrf所述,可以為所需的 URI-s 禁用 CSRF。 例如,我在 VerifyCsrfToken 類的 $except 屬性中添加了一個值作為 URL 路徑:

protected $except = [
    'oauth/authorize',
];

它有效。

好的。 一勞永逸地解決這個問題......如果你在 laravel 5.3+ 並且你必須在App\\Http\\Kernel.php $middlewareGroups中評論App\\Http\\Middleware\\VerifyCsrfToken::class 你是一個星際文件閱讀回避者,你應該被超級女孩說服並繩之以法:-(

只是在開玩笑。 我們都被追上了。

撇開雙關語不談,有一個更好的解決方案,而且很明顯,事情就是這樣。 Taylor 為路由創建了三個文件,分別是webconsoleapi

然后,Taylor 繼續在 Kernel.php 中protected $middlewareGroup行之前創建了一個注釋,說明The application's route middleware groups. . 然后他將中間件組分離為webapi

因此,如果您查看web $middlewareGroup... 它包含VerifyCsrfToken::class ,但api中間件組沒有。 答案已經擺在大家面前了! 因此,如果你把你的路由放在路由文件夾下的api.php文件中,那么你將永遠不會有csrf驗證,只要它們對應的路由在web.php路由文件中,你的正常表單仍然可以有csrf保護。

幾乎總是當解決方案涉及注釋掉\\App\\Http\\Middleware\\VerifyCsrfToken::class ,通常幾乎總是由於缺乏對 laravel 5.3+ 中的路由結構的適當研究。

與以前的版本相比,只有 1 個統一的路由文件與拆分的路由文件發生了重大轉變。 拆分路由文件僅用於啟用中間件的單獨應用程序。

希望有一天這可以幫助某人。

我上次做的是從 kernel.php 禁用 CSRF,我真的不知道這是否是最佳實踐,但我注釋掉了:

 App\Http\Middleware\VerifyCsrfToken::class

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM