Laravel重写用户登录简单示例


Posted in PHP onOctober 08, 2016

本文实例讲述了Laravel重写用户登录的方法。分享给大家供大家参考,具体如下:

class AuthController extends Controller
{
  //
  use ThrottlesLogins, AuthenticatesAndRegistersUsers;
  protected $redirectTo = 'admin/index';
  protected $loginView = 'admin/login';
  protected $guard = 'admin';
  protected $redirectAfterLogout = 'admin/login';
  protected $maxLoginAttempts = 5; //每分钟最大尝试登录次数
  protected $lockoutTime = 600; //登录锁定时间
  function __construct()
  {
    $this->middleware('guest:admin', ['except' => 'logout']);
  }
  protected function validator(array $data)
  {
    return Validator::make($data, [
      'username' => 'required|max:255',
      'email' => 'required|email|max:255|unique:admin_users',
      'password' => 'required|confirmed|min:6',
    ]);
  }
  /**
   * @param Request $request
   */
  protected function validateLogin(Request $request)
  {
    $this->validate($request,[
      $this->loginUsername() => 'required',
      'password' => 'required',
      'captcha' => 'required|captcha'
    ], [
      'email.required' => '邮箱必须',
      'password.required' => '密码必须',
      'captcha.captcha' => '验证码错误',
      'captcha.required' => '验证码必须',
    ]);
  }
  /**
   * 重写登录
   * @param Request $request
   * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response
   */
  public function login(Request $request)
  {
    $this->validateLogin($request);
    // 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.
    $throttles = $this->isUsingThrottlesLoginsTrait();
    //dd($this->hasTooManyLoginAttempts($request));
    if ($throttles && $lockedOut = $this->hasTooManyLoginAttempts($request)) {
      $this->fireLockoutEvent($request);
      //日志记录
      $this->login_logs(['email'=>$request->input('email'), 'login_ip'=>$request->ip(), 'login_result'=>0, 'comments'=>'限制登录10分钟']);
      return $this->sendLockoutResponse($request);
    }
    $credentials = $this->getCredentials($request);
    if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) {
      //日志记录
      $this->login_logs(['email'=>$request->input('email'), 'login_ip'=>$request->ip(), 'login_result'=>1, 'comments'=>'登录成功']);
      return $this->handleUserWasAuthenticated($request, $throttles);
    }
    // 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.
    if ($throttles && ! $lockedOut) {
      //日志记录
      $this->login_logs(['email'=>$request->input('email'), 'login_ip'=>$request->ip(), 'login_result'=>0, 'comments'=>'登录失败']);
      $this->incrementLoginAttempts($request);
    }
    return $this->sendFailedLoginResponse($request);
  }
  /**
   * 登录记录
   * @param $data
   */
  private function login_logs ($data)
  {
    LoginLog::create($data);
  }
}

直接重写login方法,其实我是复制了原方法然后加入了一些自己的东西。

主要的一些修改就是:

1. 加入验证码(自定义了验证信息及提示)。

2. 后台登录频率的限制。

3. 登录日志记录。

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
用ODBC的分页显示
Oct 09 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
Feb 21 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
php 字符串替换的方法
Jan 10 PHP
php时间戳转换的示例
Mar 31 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
php定义一个参数带有默认值的函数实例分析
Mar 16 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
php封装一个异常的处理类
Jun 08 PHP
php判断文件上传图片格式的实例详解
Sep 30 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 #PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 #PHP
Laravel Memcached缓存驱动的配置与应用方法分析
Oct 08 #PHP
yii通过小物件生成view的方法
Oct 08 #PHP
php获取服务器操作系统相关信息的方法
Oct 08 #PHP
Yii2创建多界面主题(Theme)的方法
Oct 08 #PHP
php微信开发之自定义菜单完整流程
Oct 08 #PHP
You might like
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
php mssql 数据库分页SQL语句
2008/12/16 PHP
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
Python实现PS图像抽象画风效果的方法
2018/01/23 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
Django 限制访问频率的思路详解
2019/12/24 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
html5 viewport使用方法示例详解
2013/12/02 HTML / CSS
英语教学随笔感言
2014/02/20 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
师恩难忘教学反思
2014/04/27 职场文书
分公司负责人任命书
2014/06/04 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
《花钟》教学反思
2016/02/17 职场文书
创业计划书之寿司
2019/07/19 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
MySQL8.0的WITH查询详情
2021/08/30 MySQL
vue ant design 封装弹窗表单的使用
2022/06/01 Vue.js
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技