2014-11-18 10 views
5

Es scheint, dass Laravel 5 standardmäßig den CSRF-Filter auf alle Nicht-Get-Anfragen anwendet. Das ist in Ordnung für eine Form POST, aber möglicherweise ein Problem an eine API, die Beiträge DELETEs usw.Laravel 5: POST ohne CSRF-Überprüfung

einfache Frage sein:

Wie kann ich eine POST-Route ohne CSRF Schutz gestellt?

+1

, dass der Schutz bedeutet, wird entfernt. Übergeben Sie das Token als Teil der API-Aufrufe besser. (Ich weiß, das ist eine alte Frage, ich warne nur neue Besucher) – Kwebble

Antwort

2

Mein Hack für das Problem:

CSRF ist jetzt eine "Middleware" in App\Http\Kernel.php weltweit registriert. Das Entfernen wird standardmäßig auf keinen CSRF-Schutz (Laravel4-Verhalten) zurückgesetzt.

Um es in einer Route zu aktivieren:

  1. Erstellen Sie einen Schlüssel Kurz Hand in Ihre app/Anbieter/RouteServiceProvider.php:

    protected $middleware = [ 
        // .... 
        'csrf' => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken', 
    ]; 
    
  2. Sie können es nun ermöglichen, jede Strecke :

    $router->post('url', ['middleware' => 'csrf', function() { 
    ... 
    }]); 
    

Nicht die eleganteste Lösung IMO ...

5

Sie URIs von CSRF durch einfaches Hinzufügen von ihnen in die $except Eigenschaft des (app/Http/Middleware/VerifyCsrfToken.php) VerifyCsrfToken Middleware ausschließen:

<?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 = [ 
     'api/*', 
    ]; 
} 

Dokumentation: http://laravel.com/docs/5.1/routing#csrf-protection

+1

Ich habe den gleichen Weg benutzt, um den CSRF-Token-Schutz bei API-Anrufen zu verhindern –

1

nur zuhören. Kurz vor 30 Minuten hatte ich das gleiche Problem. Jetzt hat es gelöst. versuch es einfach.

Goto App -> HTTP-> Kernel

öffnen Sie die Kernel-Datei.

dort können Sie sehen: \ App \ Http \ Middleware \ VerifyCsrfToken :: Klasse,

deaktivieren gerade diesen besonderen Code //

Thatz it! Das wird funktionieren!

Damit Sie die Middleware von der API entfernen Aufruf (wenn Sie so wollen ..)

11

Zum app/Http/Middleware/VerifyCsrfToken.php und dann Routen eingeben (für die Sie csrf Token deaktivieren möchten) in der $ außer Array .

zum Beispiel:

class VerifyCsrfToken extends BaseVerifier 
{ 

    protected $except = [ 

     '/register' 

    ]; 
}