【问题标题】:TokenMismatchException RANDOM on ajax requests Laravelajax 请求上的 TokenMismatchException RANDOM Laravel
【发布时间】:2016-10-12 08:22:53
【问题描述】:

如何解释?

  1. 干净安装 Laravel
  2. 使用 redis 进行会话和缓存
  3. 仅当我在 Windows 上启动服务器并且仅在 Chrome 上显示时才会出现此问题。
  4. 使用简单的js函数进行ajax调用:

    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        data: {
            _token: $('meta[name="csrf-token"]').attr('content')
        }
    });
    
    for(var i = 0; i < 5; i++){
    
        getUsers();
    }
    
    function getUsers() {
        $.ajax({
            url: '/users',
            type: 'POST',
            success: function(data) {
                console.log(data);
            }
        });
    }
    
  5. 在元&lt;meta name="csrf-token" content="{{ csrf_token() }}" /&gt;中设置CSRF

  6. 返回带有数据的 JSON:

    公共函数 users() {

    $users = User::all();
    
    return response()->json([
        'users' => $users,
    ]);
    

    }

  7. 在视频的最后,您可以看到 RANDOM TokenMismatchException,即使令牌从未更改但有时会发生错误。

https://www.youtube.com/watch?v=QDucHoP647g

我知道这个问题已经讨论了多年,但为什么没有解决方案呢?

我也在 laravel github 上发帖,但没有一个解决方案不能解决我的问题。

【问题讨论】:

    标签: php laravel session csrf


    【解决方案1】:

    为什么要发送两次令牌?从$.ajaxSetup()中删除该数据部分

    您为什么使用 POST 来获取用户?请改用 GET。

    【讨论】:

    • 这是一个例子。假设我将对该 POST /users 进行插入。将发生错误。从我的测试中,我发现问题 TokenMismatchException 仅在单击 remember me 时才会发生。 (我删除了一个令牌并发送一次)。
    • 这实际上不是作者问题的答案。
    猜你喜欢
    • 2014-03-04
    • 2018-11-21
    • 2014-12-28
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2015-12-19
    相关资源
    最近更新 更多