2017-01-14 12 views
2

Я использую JWT для моего приложения Laravel + Angular. Я вижу, что Laravel 5.3 имеет функцию дросселирования входа в систему из коробки. Но как я могу заставить это работать при использовании JWT Auth? У меня есть следующий код, но дросселирование входа не работает. Несмотря на многочисленные неудачные попытки, я только получаю ошибку 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 за ваш ответ и хорошую точку. Я добавил инкремент в попытке входа в систему, но он по-прежнему показывает сообщение об ошибке «Недействительные данные входа в систему» ​​даже после неудачных попыток. – Neel

+0

Какой кеш вы используете, он работает нормально? RateLimiter использует кеш, чтобы это могло быть проблемой. –

+0

К сожалению, вы имеете в виду драйвер кэша? Я установил его как 'CACHE_DRIVER = array'. Также было бы причиной использования JWT вместо по умолчанию Auth? – Neel