我最近关注了如何在演示应用程序(博客)中正确安装和设置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 |
有关如何正确刷新令牌的任何想法?
答案 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.php
,web
和console
。
然后,泰勒(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