it-swarm.com.de

In Laravel 5, Wie kann die VerifycsrfToken-Middleware für eine bestimmte Route deaktiviert werden?

Ich verwende Laravel 5 zum Entwickeln einer App. Meine App ist mit der VendHQ-API verbunden und ich möchte einige Daten von VendHQ über deren Webhook abrufen. Gemäß deren Dokumentation =

Wenn ein Ereignis eintritt und einen Webhook auslöst, senden wir eine POST) - Anfrage an eine URL Ihrer Wahl. Die POST) - Anfrage wird im UTF- 8 Zeichensatz und anwendungs-/x-www-form-urlencodierte Codierung.

Das Problem ist, wenn sie versuchen, eine POST= Anfrage an meine Laravel App zu senden, wird in ihrer Post-Anfrage kein CSRF-Token hinzugefügt und VerifyCsrfToken Middleware sucht nach einem Token und wirft schließlich ein TokenMismatchException.

Meine Frage ist, wie kann ich diese standardmäßige VerifyCsrfToken Middleware für bestimmte Routen vermeiden, während andere Post-Anfragen aktiv bleiben?

24
Ariful Haque

CSRF ist standardmäßig auf allen Routen in Laravel 5 aktiviert. Sie können es für bestimmte Routen deaktivieren, indem Sie app/Http/Middleware/VerifyCsrfToken.php ändern

//app/Http/Middleware/VerifyCsrfToken.php

//add an array of Routes to skip CSRF check
private $openRoutes = ['free/route', 'free/too'];

//modify this function
public function handle($request, Closure $next)
    {
        //add this condition 
    foreach($this->openRoutes as $route) {

      if ($request->is($route)) {
        return $next($request);
      }
    }

    return parent::handle($request, $next);
  }

Quelle

18
Alex Kyriakidis

In Laravel 5 hat dies ein wenig nachgelassen. Jetzt können Sie einfach die Routen hinzufügen, die Sie von der Überprüfung durch csrftoken ausschließen möchten, in $except Array der Klasse

'VerifyCsrfToken' (\ app\Http\Middleware\VerifyCsrfToken.php):

class VerifyCsrfToken extends BaseVerifier
{
    protected $except = [
        // Place your URIs here
    ];
}

Beispiele:

1. Wenn Sie eine Routengruppe verwenden:

Route::group(array('prefix' => 'api/v2'), function()
{
    Route::post('users/valid','[email protected]');
});

Ihre $except Array sieht so aus:

protected $except = ['api/v2/users/valid'];

2. Wenn Sie eine einfache Route verwenden

Route::post('users/valid','[email protected]');

Ihre $except Array sieht so aus:

protected $except = ['users/valid'];

3. Wenn Sie alle Routen unter der Hauptroute ausschließen möchten (Benutzer in diesem Fall)

Ihre $except Array sieht so aus:

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

siehe: http://laravel.com/docs/master/routing#csrf-excluding-uris

47
user3252599

Wenn Sie die Version 5.2 verwenden, können Sie in: app/Http/Middleware/VerifyCsrfToken.php die Route zum Attribut hinzufügen: protected $ außer: Zum Beispiel:

protected $except = [
'users/get_some_info',
];

Der Teil der Benutzer wäre Ihr Controller, "get_some_info" wäre die Aktion. Nachdem Sie diese Änderung vorgenommen haben, stellen Sie sicher, dass Sie die Route in Ihrer routes.php hinzufügen.

8
Abraham

Fügen Sie Ihre Route zur Datei App\Http\Middleware\VerifyCsrfToken.php Hinzu:

/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'route-name-1', 'route-name-2'
];
3
Sunilspr7