我有一个SPA应用程序,我试图实现Sanctum的CSRF保护。
从文档:
验证您的SPA,您的SPA的"登录";页面应该首先向/sanctum/CSRF -cookie端点发出请求,为应用程序初始化CSRF保护
现在我在登录前请求CSRF令牌
axios.get('/sanctum/csrf-cookie').then(response => {
// Login...
});
我应该请求CSRF令牌之前做任何post请求在我的应用程序?如果是,我基本上需要在POST api/password_reset
,POST api/tracking
,POST api/register
等路由之前请求CSRF令牌。
或者有任何方法告诉Laravel Sanctum只返回419
CSRF token mismatch
错误为受保护的路由,即。路由与auth:sanctum
中间件?
编辑:
只是想说清楚,我对CSRF的实现一般没有问题。在我请求CSRF令牌后,它工作得很好。Axios将在所有后续请求中添加令牌。我的问题实际上是关于何时对CSRF令牌进行第一个请求。
我已经搜索了类似的东西,我偶然发现了这个;Laravel:如何使用方法
在某些路由上避免TokenMismatchException CSRF Token因此,您可以通过在app/Http/Middleware/VerifyCsrfToken.php
的VerifyCsrfToken
类中添加$except
数组中的路由路径来排除对CSRF令牌的检查,如下所示;
protected $except = [
'/api/password_reset',
'/api/tracking',
'/api/register',
];
这也可以在Laravel官方文档中看到,从CSRF保护中排除uri