419 状态码:HTTP 419 状态码表示“页面过期”(Page Expired),通常用于 Laravel 框架中表示 CSRF 令牌验证失败。CSRF(跨站请求伪造)是一种安全机制,用于防止恶意网站通过用户的浏览器发起对目标网站的未经授权的请求。
Laravel Jetstream:Jetstream 是 Laravel 的一个后端脚手架工具,用于快速构建现代 Web 应用程序的后端部分,包括身份验证、API 支持等功能。
问题:注销 Laravel 8 Jetstream 时页面过期(419 状态码)。
原因:
用户可以尝试刷新页面以获取新的 CSRF 令牌。
在表单中手动添加 CSRF 令牌:
<form method="POST" action="/logout">
@csrf
<button type="submit">Logout</button>
</form>
对于 AJAX 请求,可以在请求头中添加 CSRF 令牌:
let token = document.head.querySelector('meta[name="csrf-token"]');
axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
可以在 config/session.php
文件中调整 lifetime
配置项,延长会话生命周期:
'lifetime' => 120, // 单位为分钟
确保 VerifyCsrfToken
中间件已正确添加到 app/Http/Kernel.php
文件的 $middleware
数组中:
protected $middleware = [
// 其他中间件
\App\Http\Middleware\VerifyCsrfToken::class,
];
以下是一个完整的注销路由示例,包含 CSRF 保护:
// routes/web.php
Route::post('/logout', function () {
auth()->logout();
return redirect('/');
})->name('logout');
对应的视图文件:
<!-- resources/views/auth/logout.blade.php -->
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">Logout</button>
</form>
通过以上方法,可以有效解决 Laravel 8 Jetstream 注销时页面过期的问题。
领取专属 10元无门槛券
手把手带您无忧上云