2016-06-11 107 views
2

这是如何解释的?TokenMismatchException ajax请求上的RANDOM Laravel

  1. 干净安装Laravel
  2. 使用Redis的会话和缓存
  3. 的问题,如果我在Windows上启动服务器时,只显示在Chrome才会发生。
  4. 使用了Ajax调用一个简单的js函数:

    $.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. 在元<meta name="csrf-token" content="{{ csrf_token() }}" />

  6. 设置CSRF返回了数据的JSON:

    公共功能的用户(){

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

    }

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

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

我知道这个问题已经从讨论多年,但为什么不存在一个解决方案?

我也发布在laravel github上,但没有解决方案没有解决我的问题。

回答

0

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

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

+0

这是一个例子。假设我将在该POST /用户上插入一个插入。错误将会发生。从我的测试中我发现TokenMismatchException的问题只有在我点击记住我时才会发生。 (我删除了一个令牌并发送一次)。 –

+0

这实际上不是对作者问题的回答。 – antongorodezkiy