Laravel登录失败次数限制的实现方法


Posted in PHP onAugust 26, 2020

在用户身份验证的情况下,Laravel 具有内置的身份验证系统。我们可以根据要求轻松修改它。身份验证中包含的功能之一是Throttling.

为什么我们需要throttling保护?

基本上,throttling是用来保护暴力攻击的。它将在一定时间内检查登录尝试。在短登录中,throttling会计算用户或机器人尝试失败的登录尝试次数。

使用自定义登录实现限制

默认情况下,在内置身份验证控制器中实现限制。但是,如果我们需要实现它到自定义登录呢?

实现自定义登录限制非常容易。首先,我们必须将ThrottlesLogins trait包含到您的控制器中。

use Illuminate\Foundation\Auth\ThrottlesLogins;

现在,将此ThrottlesLogins trait 加到控制器中。

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\ThrottlesLogins;
class AuthController extends Controller
{
 use ThrottlesLogins;
 ......

现在转到用于对用户进行身份验证的方法。在我的例子中,我使用了 login() POST 方法。并粘贴以下代码:

public function login(Request $request)
{
 // Authenticate Inputs
 $request->validate([
 'username' => 'required', 
 'password' => 'required|min:6|max:18'
 ]);
 // If the class is using the ThrottlesLogins trait, we can automatically throttle
 // the login attempts for this application. We'll key this by the username and
 // the IP address of the client making these requests into this application.
 if (method_exists($this, 'hasTooManyLoginAttempts') &&
 $this->hasTooManyLoginAttempts($request)) {
 $this->fireLockoutEvent($request);
 return $this->sendLockoutResponse($request);
 }
 
 .......

首先,我们验证了用户提交的输入,然后实现了hasTooManyLoginAttempts() 方法。此方法将检查用户在某个时间是否执行过一定数量的失败尝试,然后系统将通过sendLockoutResponse()  方法阻止该用户。

现在,我们必须通过incrementLoginAttempts()方法指示对ThrottlesLogins trait的失败登录尝试。

if( Auth::attempt(['username' => $username, 'password' => $password]) ){
 // Redirect to appropriate dashboard 
}
else {
 // If the login attempt was unsuccessful we will increment the number of attempts
 // to login and redirect the user back to the login form. Of course, when this
 // user surpasses their maximum number of attempts they will get locked out.
 $this->incrementLoginAttempts($request);
 return redirect()->back()
  ->withInput($request->all())
  ->withErrors(['error' => 'Please check your username / password.']);
}

您还可以通过$maxAttempts和$decayMinutes属性更改允许的最大尝试次数和限制的分钟数。在这里,您可以找到完整的代码。

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\ThrottlesLogins;
class AuthController extends Controller
{
 use ThrottlesLogins;
 /**
  * The maximum number of attempts to allow.
  *
  * @return int
  */
 protected $maxAttempts = 5;
 /**
  * The number of minutes to throttle for.
  *
  * @return int
  */
 protected $decayMinutes = 1;
 public function login(Request $request)
 {
  // Authenticate Inputs
  $request->validate([
   'username' => 'required', 
   'password' => 'required|min:6|max:18'
  ]);
  // If the class is using the ThrottlesLogins trait, we can automatically throttle
  // the login attempts for this application. We'll key this by the username and
  // the IP address of the client making these requests into this application.
  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]) ){
   // Redirect to appropriate dashboard 
  }
  else {
   // If the login attempt was unsuccessful we will increment the number of attempts
   // to login and redirect the user back to the login form. Of course, when this
   // user surpasses their maximum number of attempts they will get locked out.
   $this->incrementLoginAttempts($request);
   return redirect()->back()
    ->withInput($request->all())
    ->withErrors(['error' => 'Please check your username / password.']);
  }
 }
}
Related Posts:

总结

到此这篇关于Laravel登录失败次数限制的文章就介绍到这了,更多相关Laravel登录失败次数限制内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
实现树状结构的两种方法
Oct 09 PHP
php INI配置文件的解析实现分析
Jan 04 PHP
php设计模式 Builder(建造者模式)
Jun 26 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
ThinkPHP模板自定义标签使用方法
Jun 26 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
深入剖析浏览器退出之后php还会继续执行么
May 17 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
利用PHP计算有多少小于当前数字的数字方法示例
Aug 26 #PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 #PHP
PHP执行普通shell命令流程解析
Aug 24 #PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 #PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 #PHP
WordPress免插件实现面包屑导航的示例代码
Aug 20 #PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 #PHP
You might like
超级简单的发送邮件程序
2006/10/09 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
[07:09]2014DOTA2国际邀请赛-Newbee再次发威成功晋级决赛
2014/07/19 DOTA
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
英国最大的百货公司:Harrods
2016/08/18 全球购物
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
写自荐信的七个技巧
2013/10/15 职场文书
党员批评与自我批评
2014/02/12 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
工程承包协议书
2014/04/22 职场文书
高三励志标语
2014/06/05 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
初三数学教学反思
2016/02/17 职场文书
JavaScript 语句之常用 for 循环详解
2021/03/29 Javascript
MYSQL如何查看操作日志详解
2022/05/30 MySQL