2016-05-03 15 views
0

私は、CSRF攻撃に対して安全に認証するために、laravel 5.2でjwt:authを使用しています。laravelでjwtを使用中にPOST要求を送信中5.2

あなたがここに行う方法を見つけることができます>>http://blog.nedex.io/create-an-api-server-for-mobile-apps-using-laravel-5-1/

私はVerifyCsrfToken.phpミドルウェアを除いて、配列を編集し、API /ログインおよびAPI /サインアップを追加しましたので、私はので、これら二つのアクションのJWTトークンをスキップすることができています私はログインやサインアップをしようとしていますが、まだ鍵はありません。

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'); 
    }); 
}); 

私がGETリクエストを送信する際には、 =トークン?、完璧に動作します。しかし、私はトークンを送信しておりますがPOSTリクエストを送信しようとすると、それは私にTokenMismatchExceptionを与えます。ここ

チェックスクリーンショット>>https://www.dropbox.com/sh/a901epayh1liapd/AABCwxxBN4pSG735SxQlC2jha?dl=0

POSTリクエストが失敗なぜ?助けてください。!

+1

どのようにしてPOSTでトークンを送信しますか?コードを投稿してください。 –

+0

VerifyCsrfToken.phpを投稿できるのは、それが最初にエラーがスローされる場所ですか? – Norgul

+0

class VerifyCsrfTokenはBaseVerifierを拡張します { /** * CSRF検証から除外されるべきURI。 * * @var配列 */ 保護された$ except = ['api/login'、 'api/signup'、 ]; } –

答えて

0

Laravel CSRF保護はすべてroutes.Youのデフォルトは有効になっているので、それはあなたのためにPOSTリクエストを、それを無効にするか、「X-XSRF-TOKEN」ヘッダを投げるトークンCSRFを送ることができますが起こります。しかし、それはあなたがそれを持っていないようだ、あなたはjwtトークンを使用するので(それは同じではない)。時には、あなたはCSRF保護からのURIのセットを除外したいと思うかもしれないCSRF保護

から

を除くのURI:私はあなたのAPI CSRFミドルウェアからのパスを除外示唆しています。たとえば、支払い処理にStripeを使用していて、Webhookシステムを利用している場合は、LaravelのCSRF保護からWebhookハンドラのルートを除外する必要があります。

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

あなたは、またはVerifyCsrfTokenミドルウェアのプロパティを除き$へのURIを追加することで、デフォルトのroutes.phpのファイルに含まれているウェブミドルウェアグループの外に彼らのルートを定義することにより、URIを除外することができます

新しいパスを追加するだけで

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

投稿のリクエストでは、_tokenの非表示フィールドを渡す必要があります。

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

私はそれを知っていますが、それはcsrf_tokenではありません.JWTトークンです..! jwt auth –

+0

トークンの代わりに_tokenを使ってみましたか? –

関連する問題