Laravel 5.3 使用 JWT Auth 时限制登录

Posted

技术标签:

【中文标题】Laravel 5.3 使用 JWT Auth 时限制登录【英文标题】:Laravel 5.3 Throttle Login When Using JWT Auth 【发布时间】:2017-05-29 23:29:48 【问题描述】:

我将 JWT 用于我的 Laravel + Angular 应用程序。我看到 Laravel 5.3 具有开箱即用的登录限制功能。但是在使用 JWT Auth 时,我怎样才能让它工作呢?我有以下代码,但登录限制不起作用。尽管尝试了无数次失败,但我只收到Invalid Login Details 错误,但它没有限制并显示Too many logins 错误:

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 来使用此功能?有人能帮帮我吗?

【问题讨论】:

【参考方案1】:

这是因为您的 JWTAuth 没有抛出异常来增加您的登录尝试。只需将$this->incrementLoginAttempts($request); 放入验证失败的条件中,如下所示:

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

【讨论】:

感谢@Rafal 的回复和好点。我在登录尝试中添加了增量,但即使尝试失败,它仍然只显示Invalid Login Details 错误消息。 你使用的是什么缓存,它工作正常吗? RateLimiter 正在使用缓存,所以这可能是个问题。 对不起,你指的是缓存驱动吗?我将其设置为CACHE_DRIVER=array。使用 JWT 而不是默认的 Auth 也会是不工作的原因吗? array - 会话存储在一个简单的 php 数组中,不会跨请求持久化。 这就是它不起作用的原因。将缓存更改为一些可持久的请求,例如本机会话或内存缓存 很高兴它有帮助!我建议仅将数组缓存用于测试目的。

以上是关于Laravel 5.3 使用 JWT Auth 时限制登录的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jwt laravel 5.3 中处理令牌到期?

带有 JWT 身份验证的 Laravel 5.3 CORS

Laravel 护照 VS JWT

在 Laravel 5.3 中使用多个身份验证?

尝试在 Laravel 中使用 JWT Auth 创建用户时出错 [关闭]

Laravel5.1中使用JWT-Auth时,php artisan 报错不能使用