令牌不匹配异常-初始验证


token mismatch execption - laravel auth

我有以下路线

Route::controller('users', 'UsersController');
控制器

class UsersController extends BaseController {
    protected $layout = "layouts.login";
    public function __construct() {
        $this->beforeFilter('csrf', array('on'=>'post'));
        $this->beforeFilter('auth', array('only'=>array('getDashboard')));
    }

    public function getRegister() {
    $this->layout->content = View::make('users.register');
    }

    public function logout() {
        Auth::logout();
        return Redirect::to('users/login')
        ->with('message', 'Good Bye')
        ->withInput();
    }
    public function getLogin() {
        $this->layout->content = View::make('users.login');
    }
    public function postSignin() {
        if (Auth::attempt(array('email'=>Input::get('email'), 'password'=>Input::get('password'),'role'=>'admin'))) {
    return Redirect::to('mix/dashboard')->with('message', 'You are now logged in!');
    } 
    else {
    return Redirect::to('users/login')
        ->with('message', 'Your username/password combination was incorrect')
        ->withInput();
}         
    }
    public function postCreate() {
        $validator = Validator::make(Input::all(), User::$rules);
        if ($validator->passes()) {
            // validation has passed, save user in DB
            $user = new User;
            $user->firstname = Input::get('firstname');
            $user->lastname = Input::get('lastname');
            $user->email = Input::get('email');
            $user->password = Hash::make(Input::get('password'));
            $user->save();
            return Redirect::to('users/login')->with('message', 'Thanks for registering!');
        } else {
            // validation has failed, display error messages    
            return Redirect::to('users/register')->with('message', 'The following errors occurred')->withErrors($validator)->withInput();
        }
    }

}
视图

<div class="login-body">
<h2>SIGN IN</h2>
<form method="post" action="{{Request::root()}}/users/Signin">

    <div class="control-group">
        <div class="email controls">
        {{ Form::text('email', null, array('class'=>'input-block-level', 'placeholder'=>'Email Address', 'data-rule-required'=>'true' ,'data-rule-email'=>'true')) }}
        </div>
    </div>  
    <div class="control-group">
        <div class="pw controls">
            {{ Form::password('password', array('class'=>'input-block-level', 'placeholder'=>'Password','data-rule-required'=>'true')) }}
            <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
        </div>
    </div>
   <div class="submit">
    <div class="remember">
        <input type="checkbox" name="remember" class='icheck-me' data-skin="square" data-color="blue" id="remember"> <label for="remember">Remember me</label>
    </div>
    {{ Form::submit('Login', array('class'=>'btn btn-primary'))}}
{{ Form::close() }}
<div class="forget">
                <a href="#"><span>Forgot password?</span></a>
            </div>
        </div>

每当我尝试登录时,它显示tokenmismatch异常错误并显示以下行filter.php

Route::filter('csrf', function()
{
    if (Session::token() != Input::get('_token'))
    {
        throw new Illuminate'Session'TokenMismatchException;
    }
});

过去三天我一直毫无头绪…

最糟糕的是这个错误是自动出现的,它之前工作得很好。

这是客户端问题

我刚删除了cookies,然后它就开始工作了

您可能在/users/Signin路由中添加了crsf过滤器。您有几个选项:

首先,移除路由上的crsf过滤器。

其次,您应该将csrf标记添加到表单输入(在<form ...>行之后)
{{ Form::token(); }} 

或者您可以使用Form宏更改Form声明,并包含csrf令牌。

{{ Form::open(array('url' => 'users/Signin' ) ); }}

避免在GET路由上使用csrf,因为它们没有令牌并且会抛出TokenMismatchException。你可以看看这段代码,你可以添加到你的控制器中,以避免这些异常:类UserController扩展BaseController {

/**
 * Instantiate a new UserController instance.
 */
public function __construct()
{
    $this->beforeFilter('auth', array('except' => 'getLogin'));
    $this->beforeFilter('csrf', array('on' => 'post'));
    $this->afterFilter('log', array('only' =>
                        array('fooAction', 'barAction')));
}

}'

如您所见,CSRF过滤器应用于POST方法,而认证过滤器仅应用于getLogin控制器方法。