verifycsrftoken tokenmismatchexception form error laravel-5.2

laravel-5.2 - tokenmismatchexception - verifycsrftoken except



TokenMismatchException en VerifyCsrfToken.php LĂ­nea 67 (30)

Sé que este es un error conocido con cosas como formularios en Laravel. Pero estoy enfrentando un problema con la autenticación básica en Laravel 5.2.

Creé la autenticación usando Laravel;

php artisan make:auth

Ahora tengo la misma copia de código en mi servidor y mi local. En mi local no tengo ningún problema. Sin embargo, en mi servidor, cuando intento registrar a un usuario, TokenMismatchException in VerifyCsrfToken.php Line 67 el error que dice TokenMismatchException in VerifyCsrfToken.php Line 67

Tanto mi entorno local como el servidor están sincronizados, pero sigo recibiendo el error al registrarme. ¿Alguna ayuda sobre cómo puedo solucionar esto?


¡Estaba a punto de empezar a arrancarme el pelo!

Verifique su dominio de cookie de sesión en la configuración de session.php. Hay una opción de dominio que tiene que coincidir con su entorno y es una buena práctica tener esto configurable con su archivo .env para el desarrollo.

''domain'' => env(''COOKIE_DOMAIN'', ''some-sensible-default.com''),


¿Ha verificado su campo de entrada oculto donde se genera el token?

Si es nulo, entonces su token no es devuelto por la función csrf_token. Debe escribir su ruta que represente el formulario dentro del grupo de middleware proporcionado por laravel de la siguiente manera:

Route::group([''middleware'' => ''web''], function () { Route::get(''/'', function () { return view(''welcome''); });

Aquí la ruta raíz contiene mi página de registro que requiere el token csrf. Este token es administrado por laravel 5.2.7 dentro del middleware ''web'' en kernel.php.

No te olvides de insertar {!! csrf_field () !!} dentro del formulario.


¿Lo estás redirigiendo después de la publicación? Tuve este problema y pude resolverlo devolviendo la misma vista en lugar de usar Redirect :: back ().

Utilice esta vista de retorno () -> con (), en lugar de Redirect :: back ().


A continuación funcionó para mí.

<input type = "hidden" name = "_token" value = "<?php echo csrf_token(); ?>">


Asegurarse

{!! csrf_field() !!}

se agrega dentro de su formulario en la sintaxis de blade.

o en sintaxis de forma simple

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

junto con esto, asegúrese de que, en session.php (en la carpeta de configuración), lo siguiente esté configurado correctamente.

''domain'' => env(''SESSION_DOMAIN'', ''sample-project.com''),

o actualizar lo mismo en el archivo .env como,

SESSION_DOMAIN=sample-project.com

En mi caso {!! csrf_field () !!} se agregó correctamente pero SESSION_DOMAIN no se configuró correctamente. Después de cambiarlo con el valor correcto en mi archivo .env, funcionó.


Debe tener esta línea de código en la sección de su documento HTML, puede hacerlo de forma predeterminada, no hará ningún daño:

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

Y en su formulario debe agregar este campo de entrada oculto:

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

Eso es, funcionó para mí.


Deberías probar esto.

Agregue {{csrf_field ()}} justo después de la etiqueta de apertura de su formulario.

<form method="POST" action="/your/{{ $action_id }}"> {{ csrf_field() }}


El problema para mí fue un pequeño valor post_max_size en php.ini.


En mi caso, tuve un problema al intentar iniciar sesión después de reiniciar el servidor, pero tenía el campo csrf en el formulario y no actualicé la página, o mantuvo algo mal en el caché.

Esta fue mi solución. Puse este fragmento de código en / App / Http / Middleware / VerifyCsrfToken.php

public function handle($request, Closure $next) { try { return parent::handle($request, $next); // TODO: Change the autogenerated stub } catch(TokenMismatchException $e) { return redirect()->back(); } }

Lo que hace es capturar TokenMismatchException y luego redirigir al usuario a la página (para volver a cargar el token csrf en el encabezado y en el campo). Puede que no funcione siempre, pero funcionó para mi problema.


Estaba enfrentando el mismo problema con mi aplicación ejecutándose en laravel 5.4

php artisan session:table php artisan make:auth php artisan migrate

.. y luego el siguiente comando funciona para mí :)

chmod 777 storage/framework/sessions/

Una posibilidad más de este problema, si ha configurado SESSION_DOMAIN (en .env) diferente de HOST_NAME

Codificación feliz


Hay muchas posibilidades que pueden causar este problema. déjame mencionar uno. ¿Ha alterado por casualidad su archivo de configuración session.php? Es posible que haya cambiado el valor del dominio de nulo a su nombre de sitio o cualquier otra cosa en session.php

''domain'' => null,

La configuración incorrecta en este archivo puede causar este problema.


Ir a la app/provides .

Luego, en el archivo RouteServiceProvider.php , tendrá que eliminar ''middleware'' => ''web'' en la protected function mapWebRoutes(Router $router)


Para mí, tuve que usar https seguros en lugar de http.


Ponga este código entre la etiqueta <form> y </form> :

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


Por defecto, las cookies de sesión solo se enviarán de vuelta al servidor si el navegador tiene una conexión HTTPS . Puede desactivarlo en su archivo .env (desaconsejado para la producción)

SESSION_SECURE_COOKIE=false

O puede desactivarlo en config / session.php

''secure'' => false,


Pruebe php artisan cache: borre o elimine manualmente el caché de almacenamiento del servidor.


Puede resolver eliminando la línea. vaya a app / http / kernel.php, aquí puede ver la línea / App / Http / Middleware / VerifyCsrfToken :: class, esto funcionó para mí.


Recibí este error al subir archivos grandes (videos). El formulario funcionó bien, no hubo error de desajuste, pero tan pronto como alguien adjuntó un archivo de video grande arrojaría este error de token. Ajustar el tamaño máximo de archivo permitido y aumentar el tiempo de procesamiento resolvió este problema para mí. No estoy seguro de por qué Laravel arroja este error en este caso, pero aquí hay una solución potencial más para usted.

Aquí hay una respuesta de que entra en más detalles sobre cómo resolver el problema de carga de archivos grandes.

PHP cambia el tamaño máximo del archivo de carga


Si marca algunos de los formularios predeterminados de Laravel 5.4, complete cómo encontrarlo:

<form class="form-horizontal" role="form" method="POST" action="{{ route(''password.email'') }}"> {{ csrf_field() }} <div class="form-group{{ $errors->has(''email'') ? '' has-error'' : '''' }}"> <label for="email" class="col-md-4 control-label">E-Mail Address</label> <div class="col-md-6"> <input id="email" type="email" class="form-control" name="email" value="{{ old(''email'') }}" required> @if ($errors->has(''email'')) <span class="help-block"> <strong>{{ $errors->first(''email'') }}</strong> </span> @endif </div> </div> <div class="form-group"> <div class="col-md-6 col-md-offset-4"> <button type="submit" class="btn btn-primary"> Send Password Reset Link </button> </div> </div> </form>

{{ csrf_field() }}

es la forma más adecuada de agregar un campo oculto personalizado que Laravel comprenderá.

csrf_filed() usa csrf_token() dentro como puedes ver:

if (! function_exists(''csrf_field'')) { /** * Generate a CSRF token form field. * * @return /Illuminate/Support/HtmlString */ function csrf_field() { return new HtmlString(''<input type="hidden" name="_token" value="''.csrf_token().''">''); } }

Y el método csrf_field() usa sesión para el trabajo.

function csrf_token() { $session = app(''session''); if (isset($session)) { return $session->token(); } throw new RuntimeException(''Application session store not set.''); }


Si nada funciona, puede eliminar la verificación de seguridad CSRF yendo al archivo App / Http / Middleware / VerifyCsrfToken.php y agregando sus rutas a $ excpt protegido.

por ejemplo, si quiero eliminar la protección CSRF de todas las rutas.

protected $except = [ ''/*'' ];

PD, aunque es una buena práctica incluir protección CSRF.


Su método de formulario es post. Abra el archivo .php Middleware / VerifyCsrfToken, busque el método isReading () y agregue el método ''POST'' en la matriz.


Supongo que agregó $this->middleware(''auth''); dentro del constructor de su controlador para que funcione la autenticación. En sus formularios de inicio de sesión / registro, si está utilizando {!! Form::someElement !!} {!! Form::someElement !!} , agregue la siguiente línea en la parte superior también:

{!! csrf_field() !!}

O si está usando etiquetas de entrada dentro de sus formularios, simplemente agregue la siguiente línea después de la etiqueta <form> :

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

Espero que esto ayude.


También me enfrenté al mismo problema y lo resolví más tarde. En primer lugar, ejecute el comando artesanal:

php artisan cache: clear

Y después de eso reinicia el proyecto. Espero que ayude.


También puede ocurrir si el usuario ''www-data'' no tiene permisos de acceso / escritura en la carpeta: ''laravel-project-folder'' / storage / framework / sessions /


También recibo este error, pero se resolvió el problema. Si usa php artisan serve agregue este código {{ csrf_field() }} debajo de {!! Form::open() !!} {!! Form::open() !!}

  1. php artisan cache: clear
  2. Borrar caché y navegador de cookies
  3. Uso del navegador privado (Mozilla) / Ventana de incógnito (Chrome)
  4. Abra su formulario / página y luego envíe nuevamente chicos

Espero que esto sea resolver tu problema.


Tengo el mismo problema cuando estaba probando Laravel 5.2 al principio, luego aprendí sobre {{!! csrf_field() !!}} {{!! csrf_field() !!}} para agregarse en el formulario y eso lo resolvió. Pero luego me enteré de Form Helpers, esto se encarga de la protección CSRF y no da ningún error. Aunque Form Helpers no están legítimamente disponibles después de Laravel 5.2, aún puede usarlos desde LaravelCollective .


Tuve el mismo problema, pero lo resolví corrigiendo mi formulario abierto como se muestra a continuación:

{!!Form::open([''url''=>route(''auth.login-post''),''class''=>''form-horizontal''])!!}

Si esto no resuelve su problema, ¿puede mostrar cómo abrió el formulario?


Tuve un problema similar y fue una solución fácil.

Agregue esto en su área de metaetiquetas HTML:

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

Luego, bajo su referencia JQuery, agregue este código:

<script type="text/javascript"> $.ajaxSetup({ headers: { ''X-CSRF-TOKEN'': $(''meta[name="csrf-token"]'').attr(''content'') } }); </script>

Si está utilizando el envío de formulario HTML (no AJAX), entonces debe poner:

{{ csrf_field() }}

dentro de sus etiquetas de formulario.


cambiar el controlador de sesión en session.php para archivar el mío se configuró en array.


intente cambiar la duración de la sesión en config/session.php esta manera:

''lifetime'' => 120, to ''lifetime'' => 360,

Aquí configuro la vida útil a 360, espero esta ayuda.