CSRF令牌不匹配

时间:2019-10-22 04:03:06

标签: csrf-token laravel-6.2

我真的对此错误感到沮丧,我有带有ajax post请求的数据表,但是错误CSRF令牌不匹配很少出现。 这是我的jquery ajax发布设置

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

ajax:{
    "url": "trip/jsondata",
    "dataType": "json",
    "type": "POST",
    "data" : function ( d ){
        d.nState= $('#viewoption').val(),
        d.nYear  = $('#viewyear').val();
    }
},

我很好奇为什么我的发帖请求返回CSRF令牌不匹配,所以我修改了Illuminate \ Foundation \ Http \ Middleware \ VerifyCsrfToken文件以返回如下所示的令牌值。

public function handle($request, Closure $next)
{
    if (
        $this->isReading($request) ||
        $this->runningUnitTests() ||
        $this->inExceptArray($request) ||
        $this->tokensMatch($request)
    ) {
        return tap($next($request), function ($response) use ($request) {
            if ($this->shouldAddXsrfTokenCookie()) {
                $this->addCookieToResponse($request, $response);
            }
        });
    }

    $error='getTokenFromRequest :'.$this->getTokenFromRequest($request).' | X-CSRF-TOKEN :'.$request->header('X-CSRF-TOKEN').' | Session :'.$request->session()->token();
    throw new TokenMismatchException('CSRF token mismatch. err: '.$error);
}

我尝试返回3个变量(getTokenFromRequest,X-CSRF-TOKEN和会话令牌)。 结果是:

消息:“ CSRF令牌不匹配。错误:getTokenFromRequest: w0nxu5OPWZHFrBFqqMtLsL3IWJ1vCg0VAGbCDt4c3 | X-CSRF-TOKEN: w0nxu5OPWWJFrBFqMt CiMUsbN9BumKIElvrOzJX8TnCA8UeuAAaLzbfZTO

您会看到带有会话令牌的X-CSRF-TOKEN有区别,我不知道为什么吗?

然后我尝试检入storage \ framework \ sessions文件夹,其中有两个文件。 enter image description here

第一个文件填充如下 a:7:{s:6:“ _ token”; s:40:“ w0nxu5OPWZHFrBFqMtLsL3IWJ1vCg0VAGbCDt4c3”;

第二个文件这样填充 a:2:{s:6:“ _ token”; s:40:“ CiMUsbN9BumKIElvrOzJX8TnCA8UeuAAaLzbfZTO”;

任何人都可以帮助解决我的应用程序中发生的事情吗?正常情况下,同时使用不同的令牌同时进行2次会话吗?

0 个答案:

没有答案