CSRF 保护在 Laravel + Sanctum rest api 中不起作用

时间:2021-07-12 17:54:29

标签: php laravel rest laravel-sanctum

我正在 SPA 中创建授权,

在服务器上 - Laravel + sanctum

在客户端 - Vue + Axios

我想防范 CSRF,为此我安装了 Sanctum 包

app/Http/Kernel.php 文件中添加了中间件

'api' => [
    EnsureFrontendRequestsAreStateful::class,
    'throttle:api',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],

routes/api.php 文件中

已创建路线 Route::post ('/register', [AuthController::class, 'register']);

在控制器中我添加了一个简单的注册验证

public function register(Request $request)
{
    
    $request->validate([
        'name'     => 'required|string',
        'email'    => 'required|email:rfc,dns|string|unique:users,email',
        'password' => 'required|string|confirmed',
    ]);
    
    $user = User::create([
        'name'     => $request->name,
        'email'    => $request->email,
        'password' => bcrypt($request->password),
    ]);
    
}

在我提交表单后,数据无缝添加到数据库中并创建了用户。

尽管 Sanctum 建议我另外发送带有 XSRF-TOKEN 的 cookie。否则,应该向我返回一个错误,即没有 HTTP 状态为 419 的 CSRF 令牌。

但是没有错误并且添加了数据

浏览器中没有保存的cookies,我检查,清理,隐身打开,尝试通过Postman发送请求

我想看到这个错误,但我没有得到它

告诉我缺少什么?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。 我忘了加到 axios

axios.defaults.withCredentials = true;

并在cors.php

'supports_credentials' => true,

添加这些设置后,一切正常