刷新护照laravel中的令牌时,TokenMismatchException

问题描述 投票:0回答:3

我最近遵循了官方文档,了解如何在演示应用程序(博客)中正确安装和设置Laravel Passport。

我的路线是按照these的说明设置的:

接下来,您应该在引导程序中调用Passport :: routes方法AuthServiceProvider的方法。此方法将注册发出访问令牌和撤消访问令牌所需的路由,客户和个人访问令牌:

虽然使用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     |

有关如何正确刷新令牌的任何想法?

php laravel-5 laravel-passport
3个回答
1
投票

可以根据所需的URI禁用CSRF,如https://laravel.com/docs/5.3/csrf所述。例如,我在VerifyCsrfToken类的$ except属性中添加了一个值作为URL路径:

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

并且有效。


0
投票

好。一劳永逸地解决此问题...如果您使用的是laravel 5.3+,则必须在App\Http\Middleware\VerifyCsrfToken::class$middlewareGroups中注释App\Http\Kernel.php。您是一个避免阅读银河系文档的人,您应该被女超人说服并绳之以法:-(

刚踢。我们都被赶上了。

除了双关语,还有一个更好的解决方案,这很明显,而且像这样。Taylor为路由创建了三个文件,即webconsoleapi

然后泰勒继续在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+中的路由结构。

与以前的版本相比,只有一个统一的路由文件与一个拆分的路由文件有很大的不同。创建分割路由文件仅是为了启用中间件的单独应用。

希望这对某人有帮助。


-2
投票

我上次做的是从kernel.php禁用CSRF,我真的不知道这是否是最佳实践,但我注释掉:

 App\Http\Middleware\VerifyCsrfToken::class
© www.soinside.com 2019 - 2024. All rights reserved.