首页
学习
活动
专区
工具
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 注销时页面过期的问题。

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

相关·内容

  • Laravel 8 正式发布,一起来看看有哪些新特性吧

    Laravel 8 已于昨天正式发布(非 LTS 版本),本次主版本发布引入了 Laravel Jetstream、模型类目录、模型工厂类、迁移文件压缩、频率限制优化、时间测试辅助函数、动态 Blade...下面我们一起来速览下这些新特性: Laravel Jetstream Laravel Jetstream 是在之前版本上进行优化和全新设计的 Laravel UI 脚手架代码: 其中包含了登录、注册、邮箱验证...该功能可以有效降低迁移文件的数量,并且在测试时提升性能。 优化访问频率 Laravel 8 优化了之前已经存在的访问频率限制功能 —— 支持向后兼容 throttle 中间件,并且提供了更高的灵活性。...时间测试辅助函数 在 Laravel 中,一直都可以通过 PHP Carbon 库完全控制时间的修改,Laravel 8 则在此基础上往前更进一步 —— 在测试时使用一个更加方便的辅助函数来操作时间:...$this->travelBack(); 使用这些方法时,时间会在每个测试之间重置。

    2.6K30

    【Laravel系列7.4】安全相关

    认证体系 在 Laravel 中,自带了一套用户登录认证体系,这一套体系原来是直接框架自带的,现在剥离出来通过 laravel/jetstream 组件实现了。...composer require laravel/jetstream // 使用 Livewire 栈安装 Jetstream... php artisan jetstream:install livewire...// 使用 Inertia 栈安装 Jetstream... php artisan jetstream:install inertia composer require laravel/sanctum...这个命令是我们最开始第一篇文章搭建 Laravel 框架时就见过的。 所有 Laravel 加密之后的结果都会使用消息认证码 (MAC) 签名,使其底层值不能在加密后再次修改。...总结 今天的内容主要是探讨了一下 Laravel 框架中自带的认证功能和加密相关的内容。其实更多情况下,我们会自己去做 api 形式的接口或者自己去写登录页面和验证的逻辑。

    3.6K40

    Laravel8的迁移压缩、任务批处理、速率限制优化 | 文末抽奖

    之前写了一篇Laravel提高DB查询效率的文章,转发到群里后竟然有人质疑我说“Laravel是他好几年前用的框架,没想到现在还有人在用。” 纳尼,什么意思嘛?别忘了PHP是最好的语言!...个人认为Laravel是非常优雅的开发框架:优雅的设计模式、强大的功能实现、各种方便的扩展、持续的版本更新,更主要的是迄今为止我认为最优秀的技术开发社区。 我必须为Laravel打Call。...2020年9月8号,Laravel发布了8.0版本。Laravel计划于2022年1月25日发布9.0版本。...下面我介绍一下目前Laravel最新版(8.0版本)的新特性: Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade...当在未执行任何其他迁移的情况下,你迁移数据库时,Laravel 将会先执行 schema 文件中的 SQL,再执行不包含在 schema 中的剩余迁移。

    1.9K21

    3分钟短文:说说Laravel通用缓存Cache的使用技巧

    代码时间 laravel在设计上做了很巧妙的构思,将缓存相关的类,设计得有插接件的感觉。...memcached / redis 内存数据库 dynamodb aws内存数据库 其中array驱动,是把数据直接存在变量内,放在服务器内存中,一次请求结束,或者php-fpm 闲置超时释放,就会注销掉...根据键名获取一个缓存值操作方法如下: $users = Cache::get('users'); 上面的代码使用了系统启动时注册的全局Cache门面方法,我们也可以从容器内获取一个Cache实例, 比如在路由内使用依赖注入的方式实例化...同时查看是否有第二个位置参数,将其作为expired过期时间处理。没有的,则默认为null,永不过期。...laravel日期时间处理默认使用Carbon类库,所以缓存也用到了该库, 并且把用法发挥到极致了。 比如我们可能想动态地设置过期时间,不计算时长,能不能设置为 到某个时间点结束 ? 自然是可以的。

    2.1K00

    Laravel 表单方法伪造与 CSRF 攻击防护

    Laravel 在处理提交表单请求时,会将字段值作为请求方式匹配对应的路由。...$id; })->name('task.delete'); 在 http://blog.test/task/1/delete 点击「删除任务」按钮提交表单,会显示 419 异常页面: ?...不得不说,Laravel 5.7 引入的错误提示页面虽然好看,但是错误提示信息太少,这其实是因为默认情况下,为了安全考虑,Laravel 期望所有路由都是「只读」操作的(对应请求方式是 GET、HEAD...避免跨站请求伪造攻击的措施就是对写入操作采用非 GET 方式请求,同时在请求数据中添加校验 Token 字段,Laravel 也是这么做的,这个 Token 值会在渲染表单页面时通过 Session 生成...,然后传入页面,在每次提交表单时带上这个 Token 值即可实现安全写入,因为第三方站点是不可能拿到这个 Token 值的,所以由第三方站点提交的请求会被拒绝,从而避免 CSRF 攻击。

    8.7K40

    Restful安全认证及权限的解决方案

    eyJpc3MiOiJ0b3B0YWwuY29tIiwiZXhwIjoxNDI2NDIwODAwLCJodHRwOi8vdG9wdGFsLmNvbS9qd3RfY2xhaW1zL2lzX2FkbWluIjp0cnVlLCJjb21wYW55IjoiVG9wdGFsIiwiYXdlc29tZSI6dHJ1ZX0...查找Token是否存在,主要是为了解决用户注销,但Token还在时效内的问题,如果Token在Redis中存在,则说明用户已注销;如果Token不存在,则校验通过。 ...7.用户注销时,服务端需要把还在时效内的Token保存到Redis中,并设置正确的失效时长。  ? 四、在实际环境中如何使用JWT  1.Web应用程序  在令牌过期前刷新令牌。...如设置令牌的过期时间为一个星期,每次用户打开Web应用程序,服务端每隔一小时生成一个新令牌。如果用户一个多星期没有打开应用,他们将不得不再次登录。 ...七、附录  https://www.toptal.com/web/cookie-free-authentication-with-json-web-tokens-an-example-in-laravel-and-angularjs

    2.9K50

    单点登录实现原理(SSO)

    下面对上图进行解释: 当用户还没进行用户登录的时候 1 用户去访问系统1的保护资源 ,系统1检测到用户还没登录,跳转至SSO认证中心,SSO认证中心也发现用户没有登录,就跳转到用户至认证中心的登录页面...2 用户在登录页面提交用户相应信息后,认证中心会校验用户信息,如果用户信息正确的话认证中心就会创建与该用户的全局会话(全局会话过期的时候,用户就需要重新登录了。...如果系统1的局部会话存在的话,当用户去访问系统1的保护资源时,就直接返回保护资源,不需要去认证中心验证了 局部会话存在,全局会话一定存在;全局会话存在,局部会话不一定存在;全局会话销毁,局部会话必须销毁如果在校验令牌过程中发现客户端令牌和服务器端令牌不一致或者令牌过期的话...,则用户之前的登录就过期了,用户需要重新登录 #### 2 单点注销 在一个子系统中注销,全局会话也会被注销,所有子系统的会话都会被注销 用户向系统1发出注销请求,系统1根据用户与系统1建立的会话...id从会话中拿到令牌,向SSO认证中心发起注销请求,认证中心校验令牌有效,会销毁全局会话,同时取出此令牌注册的系统地址,认证中心向所有注册系统发出注销请求,各系统收到注销请求后销毁局部会话,认证中心引导用户跳转值登录页面

    84611

    以登录功能为例,如何设计功能测试点?

    服务端 验证码是否正确 (对应时间戳是否过期) 账户是否存在 (未注册、已注销) 密码是否正确 (记录连续输入错误次数,超过5次,账号锁定4小时。...用户名密码为空时,是否有相应提示? 如果用户未注册,提示请先注册,然后进行登录 已经注销的用户登录失败,提示信息友好? 密码框是否加密显示? 用户名是否支持中文、特殊字符? 用户名是否有长度限制?...页面默认焦点是否定位在用户名的输入框中 首次登录时相应的输入框是否为空?或者如果有默认文案,当点击输入框时默认方案是否消失? 相应的按钮如登录、重置等,是否可用;页面的前进、后退、刷新按钮是否可用?...原则 用户数在临界点时并发登录是否还能符合"3-5-8"原则 压力:大量并发用户登录,系统的响应时间是多少?...用户session过期后,重新登录是否还能重新返回这前session过期的页面? 用户名和密码输入框是事支持键盘快捷键?如:撤销、复制、粘贴等等 是否允许同名用户同时登录进行操作?

    1.7K10
    领券