2017-02-08 12 views
5

私はLaravel 5.3 & Passportを使用しています。Laravel Passportルートはログインページにリダイレクトされます

私がapi.phpファイルに設定した経路をテストするためにPostmanを使用すると、ログインページが返されます。

Route::get('/getKey', function() { 
    return 'hello'; 
})->middleware('client_credentials'); 

郵便集配人のparams:答えを探しながら、私が見つけた別のソリューションあたり:「API AUTH」へ

Accept application/json 
Authorization Bearer <then my key> 

私が設定したミドルウェアここに私のテスト路線の例があります。

protected function mapApiRoutes() 
    { 
     Route::prefix('api') 
      ->middleware('auth:api') 
      ->namespace($this->namespace) 
      ->group(base_path('routes/api.php')); 
    } 

私は他の人のために働いていたが、まだ運がないすべてのソリューションを試しました。どんな提案も大歓迎です。

更新 だから私はついに働くことができました。私はコンシューマーアプリを作成し、いくつかのテスト機能を作成しました。私はトークンの検証で、apiを消費することができました。しかし、このRouteを押すと、ログインページが返されなくなりましたが、代わりに何も返されません。それで、それはまだ何らかの理由で働いていません。

Route::get('/user', function (Request $request) { 

    return $request->user(); 
})->middleware('client_credentials'); 

答えて

8

定義済みのログインルートへのリダイレクトは、app \ Exceptions \ Handler.phpクラスで発生しています。

機能は、それがAPIから呼び出されているかどうかを検出しようと
protected function unauthenticated($request, AuthenticationException $exception) 
{ 
    if ($request->expectsJson()) { 
     return response()->json(['error' => 'Unauthenticated.'], 401); 
    } 

    return redirect()->guest(route('login')); 
} 

は(それは、JSONメッセージを401不正REPONSEを返した場合)、それがログインページにリダイレクトされない場合は、コメントによれば

はヘッダー]タブ上の要求をクリックの上、郵便配達中に問題を解決し、追加するには、認証されていない応答

に認証例外を変換します。

key: Accept 
value: application/json 

これはかなり新しいので、PostmanですべてのAPI呼び出しをテストするときに追加するヘッダーか、このlaravelメソッドがどのように設定されているのかを知ることができません。

はとにかくこれはしかし、それはあなたの基本的な認証要求がアヤックスから来ているかどうかを確認することが符号化され

1

が動作していない兆候だ、ログインページにリダイレクトされているとあなたの問題を解決するだろう。

{ 
"error": "Unauthenticated." 
} 

は、そうでない場合は、ブラウザを使用していると仮定し、それが認証のためのHTMLログインページにリダイレクトされます:認証が失敗した場合、その場合は次のようなJSONを受け取ることになります。

あなたは、Ajaxリクエストをシミュレートするために、あなたの要求に次のヘッダを追加することができます。

X-Requested-With = XMLHttpRequest 
0

あなたが「認可:ベアラYOUR_TOKEN」を追加する必要があり、あなたのすべてのリクエストのヘッダに。また、Laravel 5.5以上の最新バージョンについては、要求ヘッダーにも「Accept:application/json」を追加する必要があります。

関連する問題