首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

419 |注销Laravel 8 Jetstream时页面过期

基础概念

419 状态码:HTTP 419 状态码表示“页面过期”(Page Expired),通常用于 Laravel 框架中表示 CSRF 令牌验证失败。CSRF(跨站请求伪造)是一种安全机制,用于防止恶意网站通过用户的浏览器发起对目标网站的未经授权的请求。

Laravel Jetstream:Jetstream 是 Laravel 的一个后端脚手架工具,用于快速构建现代 Web 应用程序的后端部分,包括身份验证、API 支持等功能。

相关优势

  1. 安全性:CSRF 保护机制可以有效防止跨站请求伪造攻击。
  2. 便捷性:Jetstream 提供了快速搭建后端服务的工具,简化了开发流程。

类型与应用场景

  • CSRF 令牌验证失败:常见于用户长时间未操作页面或令牌被篡改。
  • 应用场景:任何需要用户身份验证的 Web 应用程序,特别是在表单提交和 API 请求中。

遇到的问题及原因

问题:注销 Laravel 8 Jetstream 时页面过期(419 状态码)。

原因

  1. CSRF 令牌过期:用户在页面停留时间过长,导致 CSRF 令牌失效。
  2. 令牌未正确传递:在表单提交或 AJAX 请求中未包含 CSRF 令牌。

解决方法

方法一:刷新页面

用户可以尝试刷新页面以获取新的 CSRF 令牌。

方法二:手动添加 CSRF 令牌

在表单中手动添加 CSRF 令牌:

代码语言:txt
复制
<form method="POST" action="/logout">
    @csrf
    <button type="submit">Logout</button>
</form>

方法三:在 AJAX 请求中添加 CSRF 令牌

对于 AJAX 请求,可以在请求头中添加 CSRF 令牌:

代码语言:txt
复制
let token = document.head.querySelector('meta[name="csrf-token"]');

axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;

方法四:延长 CSRF 令牌有效期

可以在 config/session.php 文件中调整 lifetime 配置项,延长会话生命周期:

代码语言:txt
复制
'lifetime' => 120, // 单位为分钟

方法五:检查中间件配置

确保 VerifyCsrfToken 中间件已正确添加到 app/Http/Kernel.php 文件的 $middleware 数组中:

代码语言:txt
复制
protected $middleware = [
    // 其他中间件
    \App\Http\Middleware\VerifyCsrfToken::class,
];

示例代码

以下是一个完整的注销路由示例,包含 CSRF 保护:

代码语言:txt
复制
// routes/web.php
Route::post('/logout', function () {
    auth()->logout();
    return redirect('/');
})->name('logout');

对应的视图文件:

代码语言:txt
复制
<!-- resources/views/auth/logout.blade.php -->
<form method="POST" action="{{ route('logout') }}">
    @csrf
    <button type="submit">Logout</button>
</form>

通过以上方法,可以有效解决 Laravel 8 Jetstream 注销时页面过期的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券