TokenMismatchException in VerifyCsrfToken.php regel 67

Ik weet dat dit een bekende fout is met zaken als formulieren in Laravel. Maar ik heb een probleem met basisverificatie in Laravel 5.2.

Ik heb de auth gemaakt met Laravel;

php artisan make:auth

Nu heb ik dezelfde kopie van de code op mijn server en mijn lokale. Op mijn lokale krijg ik geen enkel probleem. Wanneer ik echter op mijn server een gebruiker probeer te registreren, krijg ik de foutmelding TokenMismatchException in VerifyCsrfToken.php Line 67

Zowel mijn lokale als serveromgevingen zijn gesynchroniseerd, maar ik krijg steeds de foutmelding bij de registratie. Hulp over hoe ik dit kan oplossen?


Antwoord 1, autoriteit 100%

Ik neem aan dat je $this->middleware('auth');hebt toegevoegd in de constructor van je controller om de authenticatie te laten werken. In uw aanmeldings-/registratieformulieren, als u {!! Form::someElement !!}, voeg ook de volgende regel bovenaan toe:

{!! csrf_field() !!}

Of als u invoertags in uw formulieren gebruikt, voegt u gewoon de volgende regel toe na de <form>-tag:

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

Hopelijk helpt dit.


Antwoord 2, autoriteit 18%

Ik had een soortgelijk probleem en het was een gemakkelijke oplossing.

Voeg dit toe aan uw HTML-metataggebied:

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

Voeg vervolgens onder uw JQuery-referentie deze code toe:

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

Als u het HTML-formulier voor indienen (niet AJAX) gebruikt, moet u het volgende invullen:

{{ csrf_field() }} 

in uw formuliertags.


Antwoord 3, autoriteit 15%

Ik stond op het punt mijn haar uit te trekken!

Controleer uw sessiecookiedomein in session.php config. Er is een domeinoptie die moet passen bij uw omgeving en het is een goede gewoonte om dit configureerbaar te hebben met uw .env-bestand voor ontwikkeling.

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

Antwoord 4, autoriteit 12%

U moet deze regel code in de sectie van uw HTML-document hebben, u zou dat standaard kunnen doen, het kan geen kwaad:

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

En in uw formulier moet u dit verborgen invoerveld toevoegen:

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

Dat is het, werkte voor mij.


Antwoord 5, autoriteit 12%

Als niets werkt, kunt u de CSRF-beveiligingscontrole verwijderen door naar het bestand App/Http/Middleware/VerifyCsrfToken.php te gaan en uw routes toe te voegen aan de beveiligde $excpt.

bijv. als ik de CSRF-beveiliging van alle routes wil verwijderen.

protected $except = [
    '/*'
];

P.S. hoewel het een goede gewoonte is om CSRF-bescherming op te nemen.


Antwoord 6, autoriteit 11%

Ik had hetzelfde probleem met mijn applicatie die op laravel 5.4 draaide

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

.. en dan werkt het volgende commando voor mij 🙂

chmod 777 storage/framework/sessions/

Nog een mogelijkheid van dit probleem, als je SESSION_DOMAIN (in .env) anders hebt ingesteld dan HOST_NAME

Veel plezier met coderen


Antwoord 7, autoriteit 7%

Ik heb hetzelfde probleem ook gehad en heb het later opgelost.
voer eerst het artisan-commando uit:

php artisan cache:clear

En start daarna het project opnieuw.
Hoop dat het zal helpen.


Antwoord 8, autoriteit 7%

Uw formuliermethode is post. Dus open het Middleware/VerifyCsrfToken .php-bestand, zoek de isReading()-methode en voeg de ‘POST’-methode in de array toe.


Antwoord 9, autoriteit 7%

Er zijn veel mogelijkheden die dit probleem kunnen veroorzaken.
laat ik er een noemen.
Heb je toevallig je session.php configuratiebestand gewijzigd?
Mogelijk hebt u de waarde van het domein gewijzigd van null in uw sitenaam of iets anders in session.php

'domain' => null,

Een verkeerde configuratie in dit bestand kan dit probleem veroorzaken.


Antwoord 10, autoriteit 4%

Ik krijg deze foutmelding ook, maar het probleem is opgelost. Als je php artisan servegebruikt, voeg dan deze code {{ csrf_field() }}toe onder {!! Form::open() !!}

  1. php artisan cache:clear
  2. Cache wissen & cookies browser
  3. Privébrowser (Mozilla) / incognitovenster (Chrome) gebruiken
  4. Open je formulier/pagina en verzend het opnieuw, jongens

Ik hoop dat dit je probleem oplost.


Antwoord 11, autoriteit 4%

Zorg ervoor

{!! csrf_field() !!}

wordt toegevoegd aan uw formulier in blade-syntaxis.

of in eenvoudige syntaxis

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

samen met dit,
zorg ervoor dat in session.php (in config folder), het volgende correct is ingesteld.

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

of update hetzelfde in .env-bestand zoals,

SESSION_DOMAIN=sample-project.com

In mijn geval {!! CSRF_FIELD () !!} is correct toegevoegd, maar session_domain is niet correct geconfigureerd. Nadat ik het heb gewijzigd met de juiste waarde in mijn .NV-bestand, werkte het.


Antwoord 12, Autoriteit 3%

Wijzig de sessiedriver in session.php naar de bestanden van het bestand is ingesteld op Array.


Antwoord 13, Autoriteit 3%

kan ook optreden als de gebruiker van ‘www-gegevens geen toegang / schrijfrechten heeft
op de map:
‘Laravel-project-map’ / opslag / raamwerk / sessies /


Antwoord 14, Autoriteit 3%

Door standaardsessie-cookies worden alleen teruggestuurd naar de server als de browser een https -aansluiting heeft. U kunt het uitschakelen in uw .NV-bestand (ontmoedigd voor productie)

SESSION_SECURE_COOKIE=false

of u kunt het uitschakelen in config / session.php

'secure' => false,

Antwoord 15, Autoriteit 3%

Hieronder werkte voor mij.

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

Antwoord 16

Hebt u uw verborgen invoerveld gecontroleerd waar het token wordt gegenereerd?

Als het null is, wordt uw token niet geretourneerd door CSRF_TOKE-functie. U moet uw route schrijven die het formulier binnen de middleware-groep verschaft door Laravel als volgt:

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

Hier een root-route bevat mijn aanmeldingspagina waarvoor CSRF-token vereist is. Dit token wordt beheerd door Laravel 5.2.7 Inside ‘Web’ Middleware in kernel.php.

Vergeet niet om {!! CSRF_FIELD () !!} In het formulier ..


Antwoord 17

Ga naar app/provides.

Vervolgens moet u in het bestand RouteServiceProvider.php'middleware' => 'web'in protected function mapWebRoutes(Router $router)


Antwoord 18

Het probleem van mij was de kleine post_max_size waarde in php.ini.


Antwoord 19

Plaats deze code tussen <form>en </form>tag:

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

Antwoord 20

Ik had hetzelfde probleem, maar ik heb het opgelost door mijn geopende formulier te corrigeren, zoals hieronder weergegeven:

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

Als dit je probleem niet oplost, kun je dan laten zien hoe je het formulier hebt geopend?


Antwoord 21

Je zou dit eens moeten proberen.

Voeg {{ csrf_field() }}toe net na de openingstag van je formulier, zoals zo.

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

Antwoord 22

Redirect je het terug na de post? Ik had dit probleem en ik heb het kunnen oplossen door dezelfde weergave terug te sturen in plaats van de Redirect::back().

Gebruik deze return view()->with(), in plaats van Redirect::back().


Antwoord 23

Voor mij moest ik beveiligde https gebruiken in plaats van http.


Antwoord 24

probeer de sessieduur op config/session.phpals volgt te wijzigen:

'lifetime' => 120,tot 'lifetime' => 360,

Hier stel ik de levensduur in op 360, hoop dat dit helpt.


Antwoord 25

Ik kreeg deze foutmelding bij het uploaden van grote bestanden (video’s). Formulier werkte prima, geen mismatch-fout, maar zodra iemand een groot videobestand bijvoegde, werd deze token-fout gegenereerd. Het aanpassen van de maximaal toegestane bestandsgrootte en het verhogen van de verwerkingstijd loste dit probleem voor mij op. Ik weet niet zeker waarom Laravel deze fout in dit geval geeft, maar hier is nog een mogelijke oplossing voor jou.

Hier is een StackOverflow-antwoord dat meer in detail gaat over het oplossen van het probleem met het uploaden van grote bestanden.

PHP de maximale bestandsgrootte voor uploaden wijzigen


Antwoord 26

In mijn geval had ik een probleem bij het inloggen na het herstarten van de server, maar ik had een csrf-veld in het formulier en ik heb de pagina niet vernieuwd, of er bleef iets mis in de cache.

Dit was mijn oplossing. Ik plaats dit stukje code in \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();
    }
}

Wat het doet, is de TokenMismatchException opvangen en de gebruiker vervolgens terugsturen naar de pagina (om het csrf-token in de header en in het veld opnieuw te laden).
Het werkt misschien niet altijd, maar het werkte voor mijn probleem.


Antwoord 27

Probeer php artisan cache:wis de opslagcache of verwijder deze handmatig van de server.


Antwoord 28

Als je enkele van de standaardformulieren van Laravel 5.4 aanvinkt, vind je hoe dit wordt gedaan:

<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() }} 

is de meest geschikte manier om een aangepast verborgen veld toe te voegen dat Laravel zal begrijpen.

csrf_filed()gebruikt csrf_token()binnen zoals je kunt zien:

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().'">');
    }
}

En csrf_field()methode gebruikt sessie voor de taak.

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

Antwoord 29

Ik heb hetzelfde probleem toen ik Laravel 5.2 eerst uitprobeerde, toen hoorde ik over {{!! csrf_field() !!}}toe te voegen aan het formulier en dat loste het op. Maar later leerde ik over Form Helpers, dit zorgt voor CSRF-bescherming en geeft geen fouten. Hoewel Formulierhelpers niet legitiem beschikbaar zijn na Laravel 5.2, kun je ze nog steeds gebruiken via LaravelCollective.


Antwoord 30

Ga naar je laravel-map :: App/http/Middleware/VerifyCsrfToken.php

<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        // Pass your URI here. example ::
        '/employer/registration'
    ];
}

En het zal deze url uitsluiten van de Csrf-validatie. Werkt voor mij.

Other episodes