wake-up-neo.com

Laravel 5.2: csrf token funktioniert nicht

Hi Warum ist mein Csrf-Tokenwert null? Und wenn ich kein Token verwende, habe ich TokenMismatchException nicht benutzt !!!! wie kann ich es reparieren ?

Look at the image Please

Ich habe tiefer gegraben und festgestellt, dass eine Sitzung nicht in SessionServiceProvider registriert wird. Gibt es etwas, das aktiviert werden muss, damit dies standardmäßig funktioniert? Da ich a Laravel Anfänger bin, bin ich mir nicht sicher, wie ich den Ratschlag oben befolgen soll. Wie stelle ich sicher, dass meine Routen unter der Gruppe "Web" hinzugefügt werden?

<form method="post" action="<?php echo url('/form'); ?>">
    <input type="hidden" name="_Token" value="{{ csrf_token() }}">
    <input type="text" name="Title" placeholder="Title"><br>
    <textarea rows="10" name="Content" placeholder="Content"></textarea><br>
    <input type="submit" value="Send">
</form>
7
Morteza Negahi

Stellen Sie sicher, dass auf Ihrer Route die web milddleware angewendet ist.

So ziemlich jeder Weg, auf dem Sie Sitzungen, csrf-Schutz, verschlüsselte Cookies, Sitzungsfehler usw. wünschen, müssen Sie die 'Web'-Middleware-Gruppe anwenden.

Überprüfen Sie Ihre route.php-Datei wie folgt auf die Routengruppe:

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

Update: Seit 5.2.27 Die RouteServiceProvider setzt jetzt alle Ihre Routen in routes.php in eine Routengruppe, in der die web-Middleware installiert ist.

24
lagbox

In Version 5.2: Sie verschieben Route in:

Route::group(['middleware' => ['web']], function () {
    //Your route here
});

Sie haben zwei Möglichkeiten, Token in Form zu verwenden ( https://laravel.com/docs/master/routing#csrf-protection ):

// Vanilla PHP
<?php echo csrf_field(); ?>

// Blade Template Syntax
{{ csrf_field() }}

Oder

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

Stellen Sie sicher, dass der session-Pfad beschreibbar ist. Ist dies nicht der Fall, vergleicht laravel den Wert null (kein Sitzungstoken) mit dem Wert $ _POST ['_ token'] und wirft trotz des eigentlichen Grunds einen Konflikt aus.

3
shukshin.ivan

benutzen 

{!! csrf_token() !!} 

anstatt 

{{ csrf_token() }}
3
cookiemonsta

Nur wenn noch jemand dieses Problem trifft,

inside config/session.php meine Sitzungen funktionierten im Wesentlichen nicht (obwohl sie für eine Weile in Ordnung zu sein schienen)

Stellen Sie sicher, dass die Variable ' domain ' auf null gesetzt ist!

Behebung alles für mich als keine der anderen Dinge, wo eigentlich mein Problem.

Hoffe es hilft jemandem.

3
WebTim

Bearbeiten Sie dazu Ihre VerifyCsrfToken.php aus dem Middleware-Ordner

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)

    {
        $response = $next($request);
        $response->headers->set('Access-Control-Allow-Origin' , '*');
        $response->headers->set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE');
        $response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With, Application');

        return $response;
    }
}

Ich habe das gleiche Problem wie Sie, ich bin auf Laravel 5.2, ich habe auch ein Token-Feld in meinem Formular, aber trotzdem wirft mir der Fehler von "TokenMismatch" sehr nervig, oder?

2
Juliver Galleto

Ich denke, dass dies ein sehr tiefes Problem ist, da es viele Ursachen dafür geben kann .. Für mich habe ich ein Upgrade von Laravel 5.1 auf 5.2 durchgeführt. Ich verwende die Datenbank auch zum Speichern meiner Sitzungen ... Diese gab mir diesen Fehler, aber als ich die Laravel-Fehlerprotokolle (/ storage/logs) überprüfte, stellte ich fest, dass Laravel 5.2 in der Sitzungstabelle user_id erwartet , ip_address und user_agent Felder. Meins nicht Wenn ich diese Felder hinzufügte, funktionierte alles genauso wie vor dem Upgrade . Mein Rat ist also, das Fehlerprotokoll zu überprüfen!

1
omarjebari

Diese Antwort gilt für alle Personen, die {{ csrf_field() }}.__ bereits verwendet haben. Sie haben nach dem <form>-Tag in ihrer view.blade.php-Datei den php artisan key:generate-Befehl ausgeführt, erhalten jedoch weiterhin den Token Mismatch-Fehler. Dies sind die Schritte, die ich unternommen habe, um den TokenMismatchException-Fehler für eines meiner Projekte zu beheben, das sich noch in der Entwicklung befand. 

Löschen Sie Cache-Dateien aus den folgenden zwei Ordnern in Ihrem Laravel-Projekt: 

  1. lagerung/Rahmen/Sitzungen /
  2. speicher/Rahmen/Ansichten /

Löschen Sie Ihren Browser-Cache, nachdem Sie die Cache-Dateien entfernt haben.

1
Colin Stadig

Ich habe das gleiche Problem. Ich habe nicht gefunden, wie ein Kernproblem behoben werden kann, aber ich denke, dass dies eine anständige Lösung ist: Laravel 5.x: CSRF-Fehler auf vorherige Seite umleiten
Stattdessen TokenMismatchExceptionredirect Benutzer auf vorherige Seite mit Fehlermeldung zu werfen.
Dazu overrideVerifyCsrfToken.($request, Closure $next) Methode.
Öffnen Sie App\Http\Middleware\VerifyCsrfToken.php und gehen Sie zur Basisklasse (Illuminate\Foundation\Http\Middleware\VerifyCsrfToken) und kopieren Sie die Handle-Methode in App\Http\Middleware\VerifyCsrfToken.php und ändern Sie die Zeile, die TokenMismatchException auslöst, um zur vorherigen Seite umzuleiten. Fügen Sie auch Import use Closure; hinzu. Nach allen Änderungen wird App\Http\Middleware\VerifyCsrfToken.php folgendermaßen aussehen: 

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

/**
 * Class VerifyCsrfToken
 * @package App\Http\Middleware
 */
class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
    ];

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

        //throw new TokenMismatchException;
        return Redirect::back()->withError('Sorry, we could not verify your request. Please try again.');
    }
}

Lösung 2 ist die Verwendung von Koffein für Laravel .
Caffeine For Laravel ist ein Paket, mit dem verhindert werden soll, dass CSRF-Token von Benutzern auf Ihrer Website ein Zeitlimit überschreiten, während Sie ein Formular ausfüllen.
Mike, der Paketersteller, wollte eine sichere Möglichkeit haben, Benutzern, die sich Zeit nehmen, Formulare auszufüllen, das Leben leichter zu machen, indem sie das Token durch einen hinter den Kulissen befindlichen Ajax-Aufruf wach halten.

0
gandra404

Sie könnten dies einfach verwenden:

<form method="POST" action="/addUser" >
 {!! csrf_field() !!}
...
</form>
0

Um die Sicherheit in diesem Formular nicht zu überprüfen, muss der Dateipfad: config/auth.php auf Laravel aufgerufen werden. In dieser Datei sollten Sie die Zeile 'no_csrf' => array(), finden (oder erstellen). In dieser Zeile werden die Routen hinzugefügt, deren Sicherheit nicht überprüft werden kann. In dieser Anordnung müssen Sie den Pfad zu Ihrem Formular hinzufügen, beispielsweise:

'No_csrf' => array('/form'),
0
J.C. Gras

Vielleicht können Sie dies verwenden: (src = https://laravel.com/docs/5.2/routing )

<form action="/foo/bar" method="POST">
 <input type="hidden" name="_method" value="PUT">
 <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
0
Kokno

Ich hatte das gleiche Problem. Gelöst wurde es durch Löschen aller Dateien im Sitzungsordner ..__ Der Pfad des Sitzungsordners lautet: yourApplication/storage/framework/sessions / 

0
setu

Ich kann dieses Problem bestätigen, sowohl csrf_token () als auch csrf_field () erzeugen leere Tokenfelder in Laravel 5.2. Laut den Dokumenten sollten beide Methoden noch funktionieren, scheinen dies aber nicht zu tun. Meine Installation ist völlig neu, so dass entweder die Dokumente falsch sind oder ein Fehler vorliegt.

0
Jasper