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 相关文章推荐
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
Jun 24 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
PHP中round()函数对浮点数进行四舍五入的方法
Nov 19 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
Jul 01 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
使用Yii2实现主从数据库设置
Nov 20 PHP
php递归函数怎么用才有效
Feb 24 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 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做推送服务端实现ios消息推送
2013/07/01 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
微信小程序new Date()方法失效问题解决方法
2019/07/29 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
Python文件去除注释的方法
2015/05/25 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
python 实现矩阵填充0的例子
2019/11/29 Python
Python中常用的os操作汇总
2020/11/05 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
情侣吵架检讨书
2014/02/05 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
2014年双拥工作总结
2014/11/21 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
自荐信格式模板
2015/03/27 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫
golang为什么要统一错误处理
2022/04/03 Golang
idea下配置tomcat避坑详解
2022/04/12 Servers