在护照laravel中刷新令牌时出现TokenMismatchException

时间:2017-04-17 23:17:31

标签: php laravel-5 laravel-passport

我最近关注了如何在演示应用程序(博客)中正确安装和设置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     |

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

3 个答案:

答案 0 :(得分:1)

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

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

它有效。

答案 1 :(得分:0)

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

正义。我们都被赶上了。

除了双关语,还有一个更好的解决方案,这很明显,而且像这样。 泰勒为路线创建了三个文件,分别为App\Http\Kernel.phpwebconsole

然后,泰勒(Taylor)继续在Kernel.php中api行之前创建了一条注释,说protected $middlewareGroup。然后,他将中间件组分为The application's route middleware groups.web

因此,如果您查看api $ middlewareGroup ...,它包含web,但是VerifyCsrfToken::class中间件组则没有。答案一直在我们面前! 因此,如果将路由放入路由文件夹下的api文件中,则您将永远不会进行csrf验证,并且只要其相应的路由位于api.php路由文件中,您的普通表单仍会具有csrf保护

几乎总是在解决方案涉及注释web.php时,通常总是由于缺乏适当的研究而导致laravel 5.3+中的路由结构。

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

希望这对某人有帮助。

答案 2 :(得分:-2)

我上次做的是从kernel.php中禁用CSRF,我真的不知道这是不是最好的做法,但我发表评论:

 App\Http\Middleware\VerifyCsrfToken::class