使用Laravel API和Vue.js在SPA中注销后,第二次登录时出现419错误

时间:2019-05-23 14:53:20

标签: laravel vue.js csrf-token

上次注销后尝试登录时,出现页面过期错误(错误419)。

我正在使用Laravel和Vue.js制作SPA的身份验证页面。第一次登录时效果很好,但是注销后显示提交第二次登录时出错。

我认为问题是CSRF先前发送过,并且可能在注销后过期了。

我的工作流程是这样:

登录组件具有作为POST方法发送给Laravel API的隐藏表单,该表单具有通过Laravel模板创建应用时设置的HTML META TAG中的csfr-token值:

  

元名称=“登录状态” content =“ {{Auth :: check()}}”

注销是通过vue组件中的提取请求完成的。因此,没有刷新完成。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:1)

从laravel文档(https://laravel.com/docs/5.8/csrf#csrf-introduction):

  

Laravel为应用程序管理的每个活动用户会话自动生成CSRF“令牌”。该令牌用于验证经过身份验证的用户是实际向应用程序发出请求的用户。

注销时,您正在使当前会话无效-这意味着您已在元数据中缓存的csrf令牌变为无效。

解决方案1 ​​

成功注销后刷​​新页面,因此php可以将活动的csrf令牌输出到您的meta标记中。例如:

fetch('/api/logout', {
    method: 'post'
}).then(() => {
    window.location.href = '/login';
});

解决方案2

考虑使用api路由中间件组。这样做将意味着该应用程序将不会触发App\Http\Middleware\VerifyCsrfToken中间件。请记住,尽管您将无法再访问该会话,所以您需要研究无状态身份验证技术,例如通过JWT的技术。

Laravel本身甚至提供了用于验证api的软件包。 (https://laravel.com/docs/5.8/passport