【问题标题】:How to make work laravel, vue session csrf如何使工作 laravel,vue session csrf
【发布时间】:2020-05-08 08:24:24
【问题描述】:

Laravel 表单需要 csrf 才能工作

如果我使用 vue+laravel 制作 spa 单页应用程序,这样我的 laravel 模板只包含空的 html 和正文, 并且用户在使用应用程序的许多小时内实际上根本没有刷新页面, (页面不刷新,因为一切都是用ajax)

如何使登录会话保持活动状态? 如何让 csrf 工作?或者我可以禁用它吗? 如果不先登录,该应用程序将不执行任何操作。

【问题讨论】:

标签: laravel vue.js csrf


【解决方案1】:

如果您将 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 令牌,因为它只是您保护对服务器的请求的方式。

【讨论】:

  • 如果我的 vuea 应用程序是单页,并且页面真的永远不会刷新,我是否需要,如果需要,如何将新的 csrfToken 更新到我的表单中?
猜你喜欢
  • 2016-07-15
  • 1970-01-01
  • 2012-08-17
  • 2017-02-17
  • 1970-01-01
  • 2018-01-13
  • 2020-11-21
  • 2020-06-25
  • 2018-08-29
相关资源
最近更新 更多