Laravel登录失败次数限制的实现方法
在用户身份验证的情况下,Laravel具有内置的身份验证系统。我们可以根据要求轻松修改它。身份验证中包含的功能之一是Throttling.
为什么我们需要throttling保护?
基本上,throttling是用来保护暴力攻击的。它将在一定时间内检查登录尝试。在短登录中,throttling会计算用户或机器人尝试失败的登录尝试次数。
使用自定义登录实现限制
默认情况下,在内置身份验证控制器中实现限制。但是,如果我们需要实现它到自定义登录呢?
实现自定义登录限制非常容易。首先,我们必须将ThrottlesLoginstrait包含到您的控制器中。
useIlluminate\Foundation\Auth\ThrottlesLogins;
现在,将此ThrottlesLoginstrait加到控制器中。
namespaceApp\Http\Controllers; useIlluminate\Http\Request; useIlluminate\Foundation\Auth\ThrottlesLogins; classAuthControllerextendsController { useThrottlesLogins; ......
现在转到用于对用户进行身份验证的方法。在我的例子中,我使用了login()POST方法。并粘贴以下代码:
publicfunctionlogin(Request$request) { //AuthenticateInputs $request->validate([ 'username'=>'required', 'password'=>'required|min:6|max:18' ]); //IftheclassisusingtheThrottlesLoginstrait,wecanautomaticallythrottle //theloginattemptsforthisapplication.We'llkeythisbytheusernameand //theIPaddressoftheclientmakingtheserequestsintothisapplication. if(method_exists($this,'hasTooManyLoginAttempts')&& $this->hasTooManyLoginAttempts($request)){ $this->fireLockoutEvent($request); return$this->sendLockoutResponse($request); } .......
首先,我们验证了用户提交的输入,然后实现了hasTooManyLoginAttempts()方法。此方法将检查用户在某个时间是否执行过一定数量的失败尝试,然后系统将通过sendLockoutResponse() 方法阻止该用户。
现在,我们必须通过incrementLoginAttempts()方法指示对ThrottlesLoginstrait的失败登录尝试。
if(Auth::attempt(['username'=>$username,'password'=>$password])){ //Redirecttoappropriatedashboard } else{ //Iftheloginattemptwasunsuccessfulwewillincrementthenumberofattempts //tologinandredirecttheuserbacktotheloginform.Ofcourse,whenthis //usersurpassestheirmaximumnumberofattemptstheywillgetlockedout. $this->incrementLoginAttempts($request); returnredirect()->back() ->withInput($request->all()) ->withErrors(['error'=>'Pleasecheckyourusername/password.']); }
您还可以通过$maxAttempts和$decayMinutes属性更改允许的最大尝试次数和限制的分钟数。在这里,您可以找到完整的代码。
validate([ 'username'=>'required', 'password'=>'required|min:6|max:18' ]); //IftheclassisusingtheThrottlesLoginstrait,wecanautomaticallythrottle //theloginattemptsforthisapplication.We'llkeythisbytheusernameand //theIPaddressoftheclientmakingtheserequestsintothisapplication. if(method_exists($this,'hasTooManyLoginAttempts')&& $this->hasTooManyLoginAttempts($request)){ $this->fireLockoutEvent($request); return$this->sendLockoutResponse($request); } $username=$request->username; $password=$request->password; if(Auth::attempt(['username'=>$username,'password'=>$password])){ //Redirecttoappropriatedashboard } else{ //Iftheloginattemptwasunsuccessfulwewillincrementthenumberofattempts //tologinandredirecttheuserbacktotheloginform.Ofcourse,whenthis //usersurpassestheirmaximumnumberofattemptstheywillgetlockedout. $this->incrementLoginAttempts($request); returnredirect()->back() ->withInput($request->all()) ->withErrors(['error'=>'Pleasecheckyourusername/password.']); } } } RelatedPosts:
总结
到此这篇关于Laravel登录失败次数限制的文章就介绍到这了,更多相关Laravel登录失败次数限制内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。