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 相关文章推荐
PHP中的加密功能
Oct 09 PHP
支持数组的ADDSLASHES的php函数
Feb 16 PHP
PHP通用检测函数集合
Feb 08 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
Aug 20 PHP
php通过记录IP来防止表单重复提交方法分析
Dec 16 PHP
php简单获取文件扩展名的方法
Mar 24 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
PHP实现用户登录的案例代码
May 10 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 PHP
php回调函数处理数组操作示例
Apr 13 PHP
PHP实现简单日历类编写
Aug 28 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
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
php头像上传预览实例代码
2017/05/02 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
Python的Django框架中的数据库配置指南
2015/07/17 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
python读取文件名称生成list的方法
2018/04/27 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
大学毕业感言
2014/01/10 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
新年祝酒词大全
2015/08/11 职场文书
Python语言规范之Pylint的详细用法
2021/06/24 Python
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers