2015-06-10 12 views
8

Provo a parlare con la mia API REST costruita con Laravel. Ma la chiamata con POSTMAN viene rifiutata a causa di una mancata corrispondenza di token. Suppongo di dover includere il token CSRF nell'intestazione. Ma ho bisogno di quello criptato? Quando inserisco questo token ho ancora l'errore che c'è una mancata corrispondenza di token.Laravel X-CSFR-Token mancata corrispondenza con POSTMAN

posso recuperare il mio gettone utilizzando:

$encrypter = app('Illuminate\Encryption\Encrypter'); 
    $encrypted_token = $encrypter->encrypt(csrf_token()); 
    return $encrypted_token; 

ma è questo dovrebbe cambiare a ogni aggiornamento?

risposta

8

Se non si utilizzano moduli - per un'API per esempio - è possibile seguire la procedura qui https://gist.github.com/ethanstenis/3cc78c1d097680ac7ef0:

In sostanza, aggiungere il seguente al vostro lama o intestazione ramoscello

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

Installare Postman Interceptor se non è già installato, e accenderlo

Poi, nel tuo browser l og nel sito (è necessario essere autorizzato), e sia ispezionare elemento o visualizza sorgente per recuperare il token

In Postman, impostare GET/POST, ecc, se necessario, e nell'intestazione creare una nuova coppia

X-CSRF-TOKEN  tokenvaluetobeinserted235kwgeiOIulgsk 

Alcune persone consigliano di disattivare il token CSRF durante il test dell'API, ma in questo caso non si sta verificando.

Se si riscontrano ancora errori, ricontrollare la risposta utilizzando preview poiché Laravel tende ad essere abbastanza esplicito con i propri messaggi di errore. Se nulla sta tornando, controlla il tuo php_error.log (come mai si chiama).

+1

Si scrive un test di unità per CSRF se necessario e per altri test è possibile disattivarlo ... si richiede qualcosa come "Voglio testare alcune funzionalità di amministrazione A, ma ho bisogno di essere loggato quindi ho anche provato funzione di accesso mentre sto testando la funzionalità A ". Non testare CSRF con ogni post/patch/put è OK - se si dispone di un test dell'unità separato rigorosamente per CSRF. – Kyslik

3

Sì, cambia ogni aggiornamento. Dovresti metterlo nella vista e quando lo pubblichi deve essere inviato come valore della variabile "_token" POST var.

Se sono solo utilizzando uno standard POST solo aggiungere questo al form:

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

Se si utilizza AJAX assicurarsi che si afferra il valore di _token e passarlo con la richiesta.

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

Problemi correlati