2014-11-18 12 views
5

Sembra che Laravel 5 applichi di default il filtro CSRF a tutte le richieste non ottenute. Questo va bene per una forma POST, ma potrebbe essere un problema per un API che i posti DELETE eccLaravel 5: POST senza controllo CSRF

semplice domanda:

Come posso impostare un percorso POST con nessuna protezione CSRF?

+1

Ciò significa che la protezione viene rimossa. È meglio passare il token come parte delle chiamate API. (Lo so che è una vecchia domanda, solo per avvertire i nuovi visitatori) – Kwebble

risposta

2

mio hack per il problema:

CSRF è ormai un "middleware" registrato a livello globale in App\Http\Kernel.php. La sua rimozione sarà predefinita senza protezione CSRF (comportamento di Laravel4).

Per abilitarlo in un percorso:

  1. creare una chiave di breve mano in app/fornitori/RouteServiceProvider.php:

    protected $middleware = [ 
        // .... 
        'csrf' => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken', 
    ]; 
    
  2. È ora possibile abilitare a qualsiasi percorso :

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

Non è la soluzione più elegante IMO ...

5

È possibile escludere URI da CSRF semplicemente aggiungendoli alla $except proprietà del VerifyCsrfToken middleware (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 = [ 
     'api/*', 
    ]; 
} 

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

+1

Ho usato lo stesso metodo per prevenire la protezione dei token CSRF sulle chiamate API –

1

basta ascoltare questo. Poco prima dei 30 minuti ho affrontato lo stesso problema. Ora è risolto. provalo

Goto App -> HTTP> Kernel

aprire il file del kernel.

lì si può vedere: \ App \ Http \ Middleware \ VerifyCsrfToken :: classe,

basta eliminare questa particolare codice usando //

Thatz esso! Questo funzionerà!

In modo che è possibile rimuovere il middleware dal API chiamare (se si desidera così ..)

11

Vai a app/Http/Middleware/VerifyCsrfToken.php e poi inserire i percorsi (per il quale si desidera disattivare CSRF token) nel $ except .

ad esempio:

class VerifyCsrfToken extends BaseVerifier 
{ 

    protected $except = [ 

     '/register' 

    ]; 
}