2017-03-07 9 views
0

私はPassportトークン認証を使用するLaravelプロジェクトを構成しています。すべてが機能しているように見えますが、auth:apiミドルウェアが失敗すると、クライアントには200のステータスとレスポンス本文にHTMLの束が返されます。代わりに、私は401のステータスで応答します。LaravelとPassportを使用した認証に失敗した場合、ステータスコード401で応答しますか?

Laravel Passportのソースまたはドキュメントで、このようなことを行うことについて何も見つかりません。私はミドルウェアのソースを見つけることさえできません。

私のテストルート:

Route::get('/protected', function() { 
    return response()->json([ 
     'success' => true 
    ]); 
})->middleware('auth:api'); 

のconfig/auth.phpミドルウェアで

'guards' => [ 
    'web' => [ 
     'driver' => 'session', 
     'provider' => 'users', 
    ], 

    'api' => [ 
     'driver' => 'passport', 
     'provider' => 'appUsers', 
    ], 
], 

'providers' => [ 
    'users' => [ 
     'driver' => 'eloquent', 
     'model' => App\Models\User::class, 
    ], 

    'appUsers' => [ 
     'driver' => 'eloquent', 
     'model' => App\Models\AppUser::class 
    ], 
], 

答えて

0

あなたはこのように返すことができます。

return abort(401); 
+0

私はミドルウェアを書いていません。私はLarave/Passportが提供するミドルウェア( 'auth:api')を使用しようとしています。 – SimpleJ

+0

ソースに変更したくない場合は、ミドルウェアを拡張できます。 –

+0

'auth'ミドルウェアには1つのメソッドしかありません。私はそのメソッドを上書きして完全に書き直す必要はありませんか? – SimpleJ

1

ユーザーが認証されない場合は、Laravel AuthenticationExceptionがスローされます。ハンドラは、あなたのapp/Exceptions/Handler.phpで定義されているunauthenticated()メソッドを呼び出します

public function render($request, Exception $e) 
{ 
    $e = $this->prepareException($e); 

    if ($e instanceof HttpResponseException) { 
     return $e->getResponse(); 
    } elseif ($e instanceof AuthenticationException) { 
     return $this->unauthenticated($request, $e); 
    } elseif ($e instanceof ValidationException) { 
     return $this->convertValidationExceptionToResponse($e, $request); 
    } 

    return $this->prepareResponse($request, $e); 
} 

この例外はIlluminate/Foundation/Exceptions/Handler.phprender方法によって処理されますが、デフォルトでは、見ることができるように

protected function unauthenticated($request, AuthenticationException $exception) 
{ 
    if ($request->expectsJson()) { 
     return response()->json(['error' => 'Unauthenticated.'], 401); 
    } 

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

を、リクエストでJSON応答が必要な場合は、JSONエラーボディを持つ401が取得されます。リクエストでJSONが期待されない場合、リクエストはログインページにリダイレクトされます。あなたは、ユーザーが認証されていないときに、異なるアクションが発生する場合

は、あなたがapp/Exceptions/Handler.phpでこのunauthenticated()方法を変更することができます。

protected function unauthenticated($request, AuthenticationException $exception) 
{ 
    if ($request->expectsJson()) { 
     return response()->json(['error' => 'Unauthenticated.'], 401); 
    } 

    return response('Unauthenticated.', 401); 
} 
2

があなたのリクエストでこのヘッダを送信することによって、それを解決することができます。

Accept : application/json 

これは401ステータスコードでこのメッセージを送信します。

{ 
    "message": "Unauthenticated." 
} 
関連する問題