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+SqlServer实现分页显示
Oct 09 PHP
Smarty结合Ajax实现无刷新留言本实例
Jan 02 PHP
PHP print类函数使用总结
Jun 25 PHP
php获取后台Job管理的实现代码
Jun 10 PHP
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
memcache命令启动参数中文解释
Jan 13 PHP
PHP实现伪静态方法汇总
Jan 13 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
swoole_process实现进程池的方法示例
Oct 29 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
Sep 27 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文件读写操作之文件写入代码
2011/01/13 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
php自定文件保存session的方法
2014/12/10 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
dojo 之基础篇
2007/03/24 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
Python实现的质因式分解算法示例
2018/05/03 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
优秀信贷员先进事迹
2014/01/31 职场文书
基督教婚礼主持词
2014/03/14 职场文书
幼儿园课题方案
2014/06/09 职场文书
2014年平安夜寄语
2014/12/08 职场文书
小学生作文批改评语
2014/12/25 职场文书
优秀团员自我评价
2015/03/10 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书
文艺委员竞选稿
2015/11/19 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python
Python中可变和不可变对象的深入讲解
2021/08/02 Python
javascript遍历对象的五种方式实例代码
2021/10/24 Javascript