【发布时间】:2020-05-08 08:24:24
【问题描述】:
Laravel 表单需要 csrf 才能工作
如果我使用 vue+laravel 制作 spa 单页应用程序,这样我的 laravel 模板只包含空的 html 和正文, 并且用户在使用应用程序的许多小时内实际上根本没有刷新页面, (页面不刷新,因为一切都是用ajax)
如何使登录会话保持活动状态? 如何让 csrf 工作?或者我可以禁用它吗? 如果不先登录,该应用程序将不执行任何操作。
【问题讨论】:
Laravel 表单需要 csrf 才能工作
如果我使用 vue+laravel 制作 spa 单页应用程序,这样我的 laravel 模板只包含空的 html 和正文, 并且用户在使用应用程序的许多小时内实际上根本没有刷新页面, (页面不刷新,因为一切都是用ajax)
如何使登录会话保持活动状态? 如何让 csrf 工作?或者我可以禁用它吗? 如果不先登录,该应用程序将不执行任何操作。
【问题讨论】:
如果您将 axios 与 Vue2 一起用于您的 ajax 请求 csrf 已在 bootstrap.js 中可用,您可以在此处看到这一行
let token = document.head.querySelector('meta[name="csrf-token"]');
如果你只想坚持你的 ajax,那么你应该把这条线放在你的挂载钩子中。
mounted() {
this.csrfToken = document.querySelector('meta[name="csrf-token"]').content
},
这个 csrfToken 应该像这样附在你的表单中
<form :method="method.toUpperCase() == 'GET' ? 'GET' : 'POST'">
<input-hidden :value="csrfToken" name="_token"/>
<input-hidden
v-if="['GET', 'POST'].indexOf(method.toUpperCase()) === -1"
:value="method"
name="_method"
/>
<!--
This hidden submit button accomplishes 2 things:
1: Allows the user to hit "enter" while an input field is focused to submit the form.
2: Allows a mobile user to hit "Go" in the on-screen keyboard to submit the form.
-->
<input type="submit" class="absolute invisible z-0">
<slot/>
</form>
作为一个很好的例子。看看这个csrf token
注意:请不要禁用 csrf 令牌,因为它只是您保护对服务器的请求的方式。
【讨论】: