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

 更新时间:2020-09-24 15:02:27   作者:佚名   我要评论(0)

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

在用户身份验证的情况下,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登录失败次数限制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • Laravel实现用户注册和登录
  • Laravel搭建后台登录系统步骤详解
  • Laravel 自带的Auth验证登录方法
  • Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
  • Laravel重写用户登录简单示例
  • 利用Laravel事件系统如何实现登录日志的记录详解
  • SSO单点登录的PHP实现方法(Laravel框架)
  • Laravel5.2使用Captcha生成验证码实现登录(session巨坑)
  • php的laravel框架快速集成微信登录的方法
  • laravel5.2实现区分前后台用户登录的方法

相关文章

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

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

    在用户身份验证的情况下,Laravel 具有内置的身份验证系统。我们可以根据要求轻松修改它。身份验证中包含的功能之一是Throttling. 为什么我们需要throttling保护?
    2020-09-24
  • 50个优秀经典PHP算法大集合 附源码

    50个优秀经典PHP算法大集合 附源码

    简介: 实际PHP开发工作当中,只需要使用官方提供的函数即可满足,不需要研究算法,不过算法研究是一个很有意义的事情, 每个算法都是一种思想的结晶 , 学习优秀的思
    2020-09-24
  • 安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题

    安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题

    我们以 PHP 扩展 zip 为例 访问PHP 官方插件库 搜索我们所需要的扩展 zip,我们选择最新的 stable 版本,进行下载 解压 tgz 下载到本地后,使用 tar -zxvf filenam
    2020-09-24
  • 有关PHP 中 config.m4 的探索

    有关PHP 中 config.m4 的探索

    最近在看php扩展相关的东西,虽然来来回回编辑了好多次config.m4,并且也在技术社区看到了 config.m4是什么?什么作用? 类的问题,但是还是觉得有必要在深入的了解下
    2020-09-24
  • php实现简易计算器

    php实现简易计算器

    php实现简易计算器,功能齐全,供大家参考,具体内容如下 包含了计算器中的所有功能 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>
    2020-09-24
  • PHP实现简单的计算器

    PHP实现简单的计算器

    本文实例为大家分享了PHP实现简单计算器的具体代码,供大家参考,具体内容如下 caculator.php <html> <head> </head> <body> <&#63;php if (!empty($_POST))
    2020-09-24
  • PHP实现简易图形计算器

    PHP实现简易图形计算器

    本文实例为大家分享了PHP实现简易图形计算器的具体代码,供大家参考,具体内容如下 主函数:index.php <!doctype html> <html> <head> <meta charset="utf-8"> <t
    2020-09-24
  • PHP数组Key强制类型转换实现原理解析

    PHP数组Key强制类型转换实现原理解析

    PHP是弱类型语言,就像JavaScript一样,在定义变量时,不需要强制指定变量的类型。同时,PHP又有着强大的数组功能,数组的Key即可以是普通的数字类型下标,也可以是
    2020-09-24
  • PHP实现计算器小功能

    PHP实现计算器小功能

    本文实例为大家分享了PHP实现计算器小功能的具体代码,供大家参考,具体内容如下 <&#63;php if (isset($_POST['sub'])) { $f = true; $error = "有以上问题: <
    2020-09-24
  • PHP autoload使用方法及步骤详解

    PHP autoload使用方法及步骤详解

    我们知道在PHP4里面,当我们使用一个类的时候,必须将该类所以文件使用include或require加进来,这样我们就可以使用类了。 而对于PHP5来说也可以使用在PHP4里面的
    2020-09-24

最新评论