tokenmismatchexception - Token Mismatch Exception on Login(Laravel)
tokenmismatchexception in verifycsrftoken.php line 68 (5)
Tuve este problema, fue causado por falta de espacio libre en el disco.
Obtenga algo de espacio e intente iniciar sesión de nuevo.
Seguí este tutorial sobre cómo crear una página de registro e inicio de sesión usando Laravel.
Todo funciona sin problemas, el único problema es que no puedo iniciar sesión. Si proporciono el nombre de usuario / contraseña incorrectos, me da un mensaje de error correctamente. Pero si uso las credenciales correctas, obtengo el siguiente error:
Illuminate / Session / TokenMismatchException
Esta es mi función csrf (predeterminada) -
Route::filter(''csrf'', function()
{
if (Session::token() != Input::get(''_token''))
{
throw new Illuminate/Session/TokenMismatchException;
}
});
Esta es la acción de la forma -
{{ Form::open(array(''url''=>''signin'', ''class''=>''form-signin'')) }}
Y esta es la parte relevante de mi UsersController
public function __construct() {
$this->beforeFilter(''csrf'', array(''on''=>''post''));
$this->beforeFilter(''auth'', array(''only''=>array(''getDashboard'')));
}
public function postSignin() {
if (Auth::attempt(array(''email''=>Input::get(''email''), ''password''=>Input::get(''password'')))) {
return Redirect::to(''dashboard'')->with(''message'', ''You are now logged in!'');
} else {
return Redirect::to(''login'')
->with(''message'', ''Your username/password combination was incorrect'')
->withInput();
}
}
public function getDashboard() {
$this->layout->content = View::make(''users.dashboard'');
}
Laravel hace un uso bastante esotérico de las sesiones, y cuando la cookie del usuario y el usuario guardan en la base de datos desalineada por alguna razón (por ejemplo, cuando vuelves a sembrar tu tabla de usuarios), obtienes una Excepción de falta de coincidencia sin más explicaciones .
Si ese es el caso, simplemente borre sus cookies.
Tuve este problema al iniciar sesión también. De vez en cuando se produjo esta excepción, por lo que me detengo e intento reproducirla. Lo consigo al hacer esto:
Primero cargo la página de inicio de sesión.
Luego borré las cookies.
Luego, sin volver a cargar la página de inicio de sesión, ingresé el nombre de usuario y la contraseña e intenté iniciar sesión.
Debido a que se eliminó la sesión (cuando eliminé las cookies), era normal que este código no pasara y lanzará TokenMismatchException.
Route::filter(''csrf'', function() {
if ( Session::getToken() != Input::get(''_token'')) {
throw new Illuminate/Session/TokenMismatchException;
}
});
Entonces, lo que hice para resolver mi problema fue agregar un redireccionamiento a la página de inicio de sesión con un mensaje para informar al usuario que la sesión podría haber expirado.
Route::filter(''csrf'', function() {
if ( Session::getToken() != Input::get(''_token'')) {
return Redirect::to(''/admin/login'')->with(''warning'', ''Your session has expired. Please try logging in again.'');
}
});
Por lo tanto, después de volver a cargar la página, se crea una nueva sesión y se resuelve el problema.
/config/session.php establece esa información ''expire_on_close'' => true, guarda y carga de nuevo tu sitio ya no tendrás el problema con Token Mismatch Exception on Login
Verifique su ruta: haga una lista para ver si el inicio de sesión está protegido por el middleware web. En mi caso, cometí un error al agregar middileware web a la ruta de inicio de sesión donde debería ser el middleware invitado.