[英]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 為路由創建了三個文件,分別是web
、 console
和api
。
然后,Taylor 繼續在 Kernel.php 中protected $middlewareGroup
行之前創建了一個注釋,說明The application's route middleware groups.
. 然后他將中間件組分離為web
和api
。
因此,如果您查看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.