2017-01-14 14 views
2

私はLaravel + AngularアプリケーションにJWTを使用しています。私はLaravel 5.3がボックスの外にログイン抑制機能を持っているのを見る。しかし、JWT Authを使用している場合、これをどのように動作させることができますか?次のコードがありますが、ログイン抑制が機能していません。数多くの失敗のInspiteは、私だけInvalid Login Detailsエラーが発生しますが、そのはToo many loginsエラーを絞ると表示されない:Laravel 5.3 JWT Auth使用時のスロットルログイン

class LoginController extends Controller 
{ 
    use AuthenticatesUsers; 

    protected $maxLoginAttempts=5; 
    protected $lockoutTime=300; 

    public function login(Request $request) 
    { 
     $credentials = $request->only('email', 'password'); 

     $this->validate($request, [ 
     'email' => 'required', 
     'password' => 'required', 
     ]); 

     if ($this->hasTooManyLoginAttempts($request)) { 
      $this->fireLockoutEvent($request); 
      return response()->json(['error' => 'Too many logins'], 400); 
     } 

     try { 
     if (! $token = JWTAuth::attempt($credentials)) { 
      return response()->json(['error' => 'Invalid Login Details'], 401); 
     } 
     } catch (JWTException $e) { 
     // something went wrong 
     $this->incrementLoginAttempts($request); 
     return response()->json(['error' => 'Could Not Create Token'], 500); 
     } 

     // if no errors are encountered we can return a JWT 
     return response()->json(compact('token')); 
    } 
} 

はどのようにJWTAuthを使用して使用してこの機能を使用していますか?誰かが私を助けてくれますか?

答えて

3

これは、JWTAuthがログイン試行を増やすために例外をスローしていないためです。単に$this->incrementLoginAttempts($request);を以下のように失敗した認証の条件に入れてください:

if (! $token = JWTAuth::attempt($credentials)) { 
$this->incrementLoginAttempts($request); 
return response()->json(['error' => 'Invalid Login Details'], 401); 
} 
+0

ありがとう、あなたの返信と良い点は@Rafalです。私はログイン試行の中でインクリメントを追加しましたが、失敗した試行の後でも 'Invalid Login Details'エラーメッセージしか表示されませんでした。 – Neel

+0

どのキャッシュを使用していますか、正しく動作していますか? RateLimiterはキャッシュを使用しているため、問題になる可能性があります。 –

+0

申し訳ありません、あなたはキャッシュドライバを参照していますか?私はそれを 'CACHE_DRIVER = array'として設定しました。また、デフォルトのAuthの代わりにJWTを使用すると、動作しない理由がありますか? – Neel

関連する問題