【问题标题】:TokenMismatchException during AJAX polling in LaravelLaravel 中 AJAX 轮询期间的 TokenMismatchException
【发布时间】:2016-06-23 06:28:52
【问题描述】:

在我的 Laravel 应用程序中,我有一个通知系统。这是使用 AJAX 轮询技术(即每 5 秒左右运行一次 ajax post 函数)运行的,类似于:

$.ajaxSetup({
    headers: {
        'X-CSRF-Token': CSRF_TOKEN
    }
});

(function pollForNewNotifications() {
    setTimeout(function () {
        $.ajax({
                type: 'POST',
                url: 'http://example.com/get-notifications',
                dataType: 'json',
                data: {
                    // data that is sent
                },
                success: function (data) {
                    // add new notifications if data is not empty logic
                    pollForNewNotifications();
                }
            })
            .fail(function (xhr, status, err) {
                console.error(xhr.responseText)
            });
    }, 5000);
})();

现在大部分时间都有效。

但是,问题是我有时会发现,如果长时间不活动,我会收到 TokenMismatchException in VerifyCsrfToken.php 错误并自动注销。

我认为是这种情况是因为 CSRF 令牌更改或更长是有效的(我可能错了)。

我该如何解决这个问题?

【问题讨论】:

    标签: ajax laravel laravel-5 csrf csrf-protection


    【解决方案1】:

    您可以删除对该特定 url 的令牌检查,以便它可以在不检查 csrf 令牌的情况下发出请求。转至app/Http/Middleware/VerifyCsrfToken.php

    放置这个

    protected $except = [
       'get-notifications',
    ];
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 虽然这可能会有所帮助,但如果我将其设置为一个数字(比如说 5000),那么问题将在 5000 分钟后再次出现。我想要它,以便会话明白它实际上并不是空闲的,而是在做某事。
      猜你喜欢
      • 2014-03-04
      • 2016-06-17
      • 2015-12-19
      • 2017-08-11
      • 2019-03-14
      • 1970-01-01
      • 2016-10-12
      • 2016-12-01
      • 2015-11-02
      相关资源
      最近更新 更多