Laravel Fortify第三方前端JSON注册遇CSRF匹配错误解决方案咨询
解决Fortify适配第三方前端的CSRF问题
针对你遇到的Fortify注册路由CSRF校验问题,不用把路由加入VerifyCsrfToken的except数组,有以下几种可行方案:
方案1:让第三方客户端先获取CSRF Token再发起请求
Laravel自带了/csrf-cookie路由,专门用于获取CSRF Token的Cookie。第三方客户端(比如移动端)可以先发送一个GET请求到该路由,服务器会返回包含XSRF-TOKEN的Cookie。之后在发送/register请求时,在请求头中添加X-XSRF-TOKEN,值为Cookie中的XSRF-TOKEN内容即可通过CSRF校验。
用Postman测试的话,步骤是:
- 发送GET请求到
http://localhost:8000/csrf-cookie,响应会设置XSRF-TOKENCookie; - 在POST
/register的请求头中添加X-XSRF-TOKEN,值取刚才的Cookie内容,再发送请求就能正常通过。
方案2:修改Fortify默认路由的中间件组
在config/fortify.php配置文件中,找到middleware配置项,默认值是web,将其改为api:
'middleware' => 'api',
这样Fortify的所有路由都会使用api中间件组,而api中间件组默认不包含VerifyCsrfToken中间件,自然就不会触发CSRF校验。
需要注意的是,api中间件组默认包含throttle:api和bindings,如果需要额外的中间件,可以自行调整。另外,使用api中间件组后,会话机制和web端不同,但注册登录流程不受影响。
方案3:手动注册Fortify路由并指定中间件
如果你不想修改全局的Fortify中间件配置,可以在routes/api.php中手动注册注册路由,指定使用api相关的中间件:
use Laravel\Fortify\Http\Controllers\RegisteredUserController; Route::post('/register', [RegisteredUserController::class, 'store']) ->middleware(['guest:api']);
这样这个注册路由就归属于api路由组,不会受到CSRF校验的限制。
内容的提问来源于stack exchange,提问作者user4738251
相关产品推荐
相关产品推荐

