基于Laravel5.4实现多字段登录功能方法示例_php实例

来源:脚本之家  责任编辑:小易  

现在,让我们一行行分析结构生成器生成的authors表,下面是up()方法中的代码:1/auto increment id(primary key)2$table->increments('id');3 4$table->string('name');5$table->integer('age')->nullable();6$table->boolean('actwww.zgxue.com防采集请勿采集本网。

前言

最近在一个项目中需要实现一个多字段登录功能,简单来说就是可以使用用户名、邮箱或手机号任意一种方式进行登录。所以本文就来给大家介绍了关于Laravel5.4多字段登录的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧。

当你需要在运行时访问配置项时,可以使用Config类: 获取一个配置项的值* 复制代码 代码如下: Config:get('app.timezone');如果配置项不存在,你还可以指定返回的默认值: 复制代码 代码如下:

以下内容基于laravel5.4

apache服务器的话 htaccess文件来控制文件的访问和跳转, laravel的public里也是写有.htaccess文件来控制路由的。

方法如下:

通过disabled属性职位true设置按钮不可用。1、获取按钮对象2、设置按钮对象的disabled的属性为true(禁用),false(不禁用)示例:btn=document.getElementById('按钮的ID');btn.disabled=true;

首先,通过artisan工具生成auth模块

php artisan make:auth

这时候App\Http\Controllers目录下会新增一个Auth目录,该目录下为注册登录相关的控制器,resources\views目录下也会生成一些与注册登录相关的视图

laravel的官方文档中说手动认证用户需要使用Illuminate\Support\Facades\Auth类的attempt方法,如下:

<?phpnamespace App\Http\Controllers;use Illuminate\Support\Facades\Auth;class LoginController extends Controller{ /** * Handle an authentication attempt. * * @return Response */ public function authenticate() { if (Auth::attempt(['email' => $email, 'password' => $password])) { // Authentication passed... return redirect()->intended('dashboard'); } }}

这个方法会根据你传入的参数判断数据库中是否存在与之相匹配的用户,如果存在并且密码正确返回true,反之返回false

遂在LoginController中添加该方法,但是好像并没有效果

于是开始观察LoginController的实现机制,发现它实现了一个AuthenticatesUsers的trait,追踪到这个trait的定义文件,发现这个文件就是我们想要的东西

里面有一个login方法,就是负责处理登录的逻辑

/** * Handle a login request to the application. * * @param \Illuminate\Http\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. // 防止暴力破解,多次登录失败会根据IP锁定 if ($this->hasTooManyLoginAttempts($request)) { $this->fireLockoutEvent($request); return $this->sendLockoutResponse($request); } // 这个就是主要的负责判断数据库中是否存在相应的账号和密码的地方,我们需要重写的就是attemptLogin方法 if ($this->attemptLogin($request)) { return $this->sendLoginResponse($request); } // 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 $this->sendFailedLoginResponse($request); }

分析了一波这个文件,发现主要进行登录判断的就是attemptLogin方法,我们只要重写这个方法即可,先看看原来的是怎么写的,根据原来的进行重写:

/** * Attempt to log the user into the application. * * @param \Illuminate\Http\Request $request * @return bool */ protected function attemptLogin(Request $request) { return $this->guard()->attempt( $this->credentials($request), $request->has('remember') ); }

在LoginController重写后:

public function attemptLogin(Request $request) { $username = $request->input('username'); $password = $request->input('password'); // 验证用户名登录方式 $usernameLogin = $this->guard()->attempt( ['username' => $username, 'password' => $password], $request->has('remember') ); if ($usernameLogin) { return true; } // 验证手机号登录方式 $mobileLogin = $this->guard()->attempt( ['mobile' => $username, 'password' => $password], $request->has('remember') ); if ($mobileLogin) { return true; } // 验证邮箱登录方式 $emailLogin = $this->guard()->attempt( ['email' => $username, 'password' => $password], $request->has('remember') ); if ($emailLogin) { return true; } return false; }

只需要用attempt方法进行多次判断即可,只要成功就返回true,不成功继续用其他字段进行判断,都不成功则返回flase

测试,可以实现多字段登录效果

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对真格学网的支持。

代码如下:ClassLoader:addDirectories(arrayapp_path().'/commands',app_path().'/controllers',app_path().'/models',app_path().'/database/seeds',app_path().'/libraries/class',/增加这一段内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • laravel 5.4重新登录实现跳转到登录前页面的原理和方法
  • laravel5.2使用captcha生成验证码实现登录(session巨坑)
  • laravel5.2实现区分前后台用户登录的方法
  • laravel5实现微信第三方登录功能
  • laravel5.5 实现后台管理登录的方法(自定义用户表登录)
  • 解决laravel5中auth用户登录其他页面获取不到登录信息的问题
  • laravel 5.3 单用户登录简单实现方法
  • laravel5.4框架使用socialite实现github登录的方法
  • laravel 5.5 实现禁用用户注册示例
  • laravel5.1 框架登录和注册实现方法详解
  • laravel框架中verifycsrftoken报错问题的解决
  • php使html标签自动补全闭合函数代码
  • thinkphp5.0框架的db操作实例分析【连接、增删改查、链式操作等】
  • yii框架无限极分类的实现方法
  • php+ajax实现无刷新动态加载数据技术
  • thinkphp5邮件发送服务封装(可发附件)
  • laravel学习教程之本地化模块
  • thinkphp中url隐藏入口文件后接收alipay传值的方法
  • laravel 解决validator使用中出现的问题
  • tp5(thinkphp5框架)实现显示错误信息及行号功能的方法
  • laravel 5.4 能自定义多个artisan命令怎么实现的
  • laravel5.4提交表单怎么多了个字段
  • laravel5.4 asset 如何与变量拼接
  • Laravel5.4 Controllers 多文件夹 我在Http目录下建立了一个文件夹 用来划分多项目区 Route如何写?
  • 如何升级laravel5.4到laravel5.5并使用新特性
  • 如何搭建laravel5.4 服务器
  • 如何在laravel5.4中使用element-ui的组件
  • laravel5.4怎么跳转对应的视图
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程laravel 5.4重新登录实现跳转到登录前页面的原理和方法laravel5.2使用captcha生成验证码实现登录(session巨坑)laravel5.2实现区分前后台用户登录的方法laravel5实现微信第三方登录功能laravel5.5 实现后台管理登录的方法(自定义用户表登录)解决laravel5中auth用户登录其他页面获取不到登录信息的问题laravel 5.3 单用户登录简单实现方法laravel5.4框架使用socialite实现github登录的方法laravel 5.5 实现禁用用户注册示例laravel5.1 框架登录和注册实现方法详解laravel框架中verifycsrftoken报错问题的解决php使html标签自动补全闭合函数代码thinkphp5.0框架的db操作实例分析【连接、增删改查、链式操作等】yii框架无限极分类的实现方法php+ajax实现无刷新动态加载数据技术thinkphp5邮件发送服务封装(可发附件)laravel学习教程之本地化模块thinkphp中url隐藏入口文件后接收alipay传值的方法laravel 解决validator使用中出现的问题tp5(thinkphp5框架)实现显示错误信息及行号功能的方法php获取数组长度的方法(有实例)微信公众平台实现获取用户openid教你如何使用php session使用php生成二维码的两种方法(带php发送get、post请求的6种方法简php中把stdclass object转array的微信公众平台网页授权获取用户基laravel框架数据库curd操作、连贯php删除数组中空值的方法介绍php从数组中删除元素的四种方法实laravel中为什么不使用blpop取队列详析yii framework框架中事件和行为的区别及应php array_walk_recursive 使用自定的函数yii2.0整合阿里云oss删除单个文件的方法php实现远程下载文件到本地thinkphp跨库操作的简单代码实例產生圖片隨機字串thinkphp自动验证机制详解php生成sitemap.xml地图函数golang实现php里的serialize()和unserial
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved