繁体   English   中英

Laravel 5.4 TokenMismatchException和Logout

[英]Laravel 5.4 TokenMismatchException and Logout

我有一个最奇怪的错误,不知道从哪里开始调试。 我有一个表单,用于向客户端发送一些电子邮件。 此表单通过ajax提交给服务器,并发回响应。

$.post('{{ route('some.route') }}', $('#check-form').serialize(), function (data) {
                buildNotification('Success', "Sent email, 'success');

                doAction('reset', true);
            }).fail(function (err) {
                buildNotification('Error!!!', err.message !== undefined ? err.message : "Failed sending email", 'danger');

                doAction('reset', true);
            });

我还在我的表单中设置了{{ csrf_field() }} ,如果我在网络选项卡中检查Chrome开发工具,我可以看到`_token'字段已设置。

问题是当我提交请求时,来自服务器的响应是TokenMismatchException的HTML。 我禁用了指定路由的令牌验证,我仍然获得了TokenMismatchException

在此之后,如果我刷新页面,我会再次重定向到登录页面(所以会话以某种方式被破坏我猜)。 我搜索了我能找到的所有内容,但似乎没有什么适用于我的情况。

我注意到的另一件事是我在Chrome上运行时只会遇到这种情况(在我的情况下是Chromium)。 还尝试了隐身模式,因为我认为某些扩展可能会导致错误但不是,仍然是同样的问题。

有关如何解决此问题的任何想法?

这就是Laravel使用Axios配置任何ajax调用的方式。 取自bootstrap.js。

/**
 * Register the CSRF Token as a common header with Axios so that
 * all outgoing HTTP requests automatically have it attached. This is just
 * a simple convenience so we don't have to attach every token manually.
 */

let token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

但是,当您使用JQuery时,您需要确保已配置了ajax设置,以便它可以传递crsf字段,如下所示。

// main.blade.php
<meta name="csrf-token" content="{{ csrf_token() }}" />


// boostrap.js, after you have imported jquery

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

希望这应该成功。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM