繁体   English   中英

Laravel 5.0 TokenMismatchException与Ajax登录

[英]Laravel 5.0 TokenMismatchException with ajax login

我正在debian 7服务器上使用laravel 5.0,php 5.5开发一个Web应用程序。

该网站允许用户通过登录方式(ajax登录)登录。 但...

我不断收到这个例外

TokenMismatchException in VerifyCsrfToken.php line 47

我知道有关csrf_token()的故事必须为Ajax发布形式,且格式为X-CSRF-TOKEN。 我已经尝试了一切,但仍然没有解决方案。

有趣的是,只有当您第一次访问该网站时,才会在首页或任何页面上直接访问。 当您访问会员区时,laravel会将您重定向到带有auth错误的首页,此后,您将再也不会获得tokenmismatchexception,相同的登录方式在阳光照耀下起作用。

任何建议

更新:

这是代码:

在标题中,我已经包含了csrf_code():

<meta name="csrf-token" content="{{ csrf_token() }}">

并采用以下格式(实际上是可选的,因为已经设置了X-CSRF-TOKEN)

<input type="hidden" name="_token" value="{{ csrf_token() }}">

路线:

Route::post('/login', ['as' => 'auth.login', 'uses' => 'Auth\AuthController@postSignin']);

VerifyCsrfToken.php用于调试。

public function handle($request, Closure $next)
{
    if ($this->isReading($request) || $this->tokensMatch($request)) {
        return $this->addCookieToResponse($request, $next($request));
    }

    throw new TokenMismatchException;
}

public function tokensMatch($request)
{
    $token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');

    if (!$token && $header = $request->header('X-XSRF-TOKEN')) {
        $token = $this->encrypter->decrypt($header);
    }
    \Clockwork::info($request->session()->token());
    //\Clockwork::info(\Session::token());
    \Clockwork::info($token);
    //return StringUtils::equals($request->session()->token(), $token);
    return StringUtils::equals(\Session::token(), $token);
}

jQuery Ajax设置:

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

输出: 在此处输入图片说明

是终于解决了,原因是因为网站开头有两个空白行。 在我使用过的内容刀片中

@extends('layouts/main')...@show

用于显示布局。 @show导致两条空行,删除@show,然后空行消失了。 无论出于何种原因,这都会破坏网站上的所有cookie,而Laravel无法创建会话。

您的所有代码进展顺利..

你可以试试这个...

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

调用jquery文件后移动此代码...

实际上,当页面即将加载时,运行此代码后会加载html dom。 您应该这样做,以便此代码在加载html dom之后运行。

我的网站上也有同样的问题。

暂无
暂无

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

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