2016-05-03 2 views
0

Ich verwende jwt: auth mit Laravel 5.2, um sich gegen CSRF-Angriffe sicher zu authentifizieren.Senden einer POST-Anfrage während der Verwendung von JWT mit Laravel 5.2

können Sie finden, wie hier zu tun >>http://blog.nedex.io/create-an-api-server-for-mobile-apps-using-laravel-5-1/

Ich habe bearbeitet die außer Array in VerifyCsrfToken.php Middleware und hinzugefügt api/login und api/Anmeldungen, also kann ich jwt Token für diese beiden Aktionen überspringen, weil während ich versuche mich anzumelden oder anzumelden, habe ich noch keine schlüssel.

Route::group(['prefix' => 'api'], function() { 

    Route::post('login', 'Api\[email protected]'); 
    Route::post('signup', 'Api\[email protected]'); 

    Route::group(['middleware' => ['jwt.auth', 'jwt.refresh']], function() { 
     Route::post('logout', 'Api\[email protected]'); 

     Route::get('test', function(){ 
      return response()->json(['foo'=>'bar']); 
     }); 

     Route::get('hospitals', 'Api\[email protected]'); 
     Route::get('emergencyDetails/{id}', 'Api\[email protected]'); 

     Route::get('profile/{id}', 'Api\[email protected]_profile'); 
     Route::post('submit_profile/{id}', 'Api\[email protected]_profile_data'); 
     Route::post('update_property/{id}/{property}/{value}', 'Api\[email protected]_property'); 

     Route::post('pregnant/{id}', 'Api\[email protected]_is_pregnant'); 
    }); 
}); 

es funktioniert perfekt, wenn ich mit GET-Anfragen schicken? Token = Aber es gibt mir ein TokenMismatchException wenn ich versuche, POST-Anfrage zu senden, obwohl ich das Token schickte.

Check die Screenshots hier >>https://www.dropbox.com/sh/a901epayh1liapd/AABCwxxBN4pSG735SxQlC2jha?dl=0

Warum POST-Anfragen scheitern ?? bitte helfen.!

+1

Wie senden Sie das Token mit POST? können Sie bitte den Code posten. –

+0

könnten Sie die VerifyCsrfToken.php posten, da das ist, wo der Fehler an erster Stelle geworfen wird? – Norgul

+0

Klasse VerifyCsrfToken erweitert BaseVerifier { /** * Die URIs, die von der CSRF-Überprüfung ausgeschlossen werden sollen. * * @var array */ geschützt $ außer = [ 'api/login', 'api/signup', ]; } –

Antwort

0

Es geschieht, weil Laravel CSRF-Schutz Standard für alle routes.You aktiviert ist, kann es deaktivieren Sie Anfrage POST oder CSRF-Token Wurf 'X-XSRF-token' Header senden. Aber es scheint, dass Sie es nicht haben, weil Sie jwt-Token verwenden (es ist nicht dasselbe). Ich schlage vor, Sie API Pfade von csrf Middleware ausschließen:

Ohne URIs Von CSRF-Schutz

Manchmal können Sie eine Reihe von URIs von CSRF-Schutz ausschließen möchten. Wenn Sie beispielsweise Stripe zum Verarbeiten von Zahlungen verwenden und ihr Webhook-System verwenden, müssen Sie Ihre Webhook-Handler-Route von Laravels CSRF-Schutz ausschließen.

können Sie URIs ausschließen, indem ihre Routen definieren, außerhalb der Web-Middleware-Gruppe, die in der Standard-routes.php-Datei enthalten ist, oder durch die URIs zu dem $ außer Eigentum der VerifyCsrfToken Middleware und fügen hinzu:

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

Fügen Sie einfach neue Pfade wie

protected $except = [ 'api/login', 'api/signup', 'api'/logout' , 'api/test', 'api/hospitals']; //etc 
-1

Für Post-Anfrage müssen Sie _token verstecktes Feld übergeben.

<input type="hidden" name="_token" value="{{ csrf_token() }}" /> 
+0

Ich weiß, dass, aber es ist kein csrf_token .. es ist ein JWT-Token ..! Haben Sie Ihren eigenen Blick auf JWT Auth –

+0

haben Sie versucht, mit _Token anstelle von Token? –

Verwandte Themen