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与已存在的Java应用程序集成
Oct 09 PHP
用php或asp创建网页桌面快捷方式的代码
Mar 23 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
php密码生成类实例
Sep 24 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
Yii rules常用规则示例
Mar 15 PHP
php使用file函数、fseek函数读取大文件效率对比分析
Nov 04 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
PHP5.6读写excel表格文件操作示例
Feb 26 PHP
PHP join()函数用法与实例讲解
Mar 11 PHP
php和C#的yield迭代器实现方法对比分析
Jul 17 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中对xml读取的相关函数的介绍一
2008/06/05 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
php中使用临时表查询数据的一个例子
2013/02/03 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
Jquery 基础学习笔记
2009/05/29 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
Python制作爬虫抓取美女图
2016/01/20 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
python3.5使用tkinter制作记事本
2016/06/20 Python
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
python3中set(集合)的语法总结分享
2017/03/24 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
便捷提取python导入包的属性方法
2018/10/15 Python
Python基础知识点 初识Python.md
2019/05/14 Python
Python中断多重循环的思路总结
2019/10/04 Python
用python实现名片管理系统
2020/06/18 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
假日旅行社实习自我鉴定
2013/09/24 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书