专栏首页编程学习园地基于Laravel5.4实现多字段登录功能方法示例

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

前言

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

以下内容基于laravel5.4

方法如下:

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

php artisan make:auth

这时候AppHttpControllers目录下会新增一个Auth目录,该目录下为注册登录相关的控制器,resourcesviews目录下也会生成一些与注册登录相关的视图

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

<?php

namespace AppHttpControllers;

use IlluminateSupportFacadesAuth;

class LoginController extends Controlle

{

/**

public function authenticate()

{

if (Auth::attempt(['email' => $email, 'password' =&gt; $password])) {

// Authentication passed...

return redirect()->intended('dashboard');

}

}

}

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

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

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

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

/**

public function login(Request $request)

{

// 表单验证

$this-&gt;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-&gt;hasTooManyLoginAttempts($request)) {

$this-&gt;fireLockoutEvent($request);

return $this-&gt;sendLockoutResponse($request);

}

// 这个就是主要的负责判断数据库中是否存在相应的账号和密码的地方,我们需要重写的就是attemptLogin方法

if ($this-&gt;attemptLogin($request)) {

return $this-&gt;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-&gt;incrementLoginAttempts($request);

// 返回失败响应

return $this-&gt;sendFailedLoginResponse($request);

}

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

/**

protected function attemptLogin(Request $request)

{

return $this->guard()->attempt(

$this-&gt;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' =&gt; $password], $request->has('remember')

);

if ($usernameLogin) {

return true;

}

// 验证手机号登录方式

$mobileLogin = $this->guard()->attempt(

['mobile' => $username, 'password' =&gt; $password], $request->has('remember')

);

if ($mobileLogin) {

return true;

}

// 验证邮箱登录方式

$emailLogin = $this->guard()->attempt(

['email' => $username, 'password' =&gt; $password], $request->has('remember')

);

if ($emailLogin) {

return true;

}

return false;

}

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

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

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助/

/,如果有疑问大家可以留言交流,谢谢大家对的支持。

原文链接:https://www.blog.zirun.me.com/php/4682.html

我来说两句

0 条评论
登录 后参与评论

相关文章

  • TP5框架简单登录功能实现方法示例

    更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》...

    砸漏
  • php 实现简单的登录功能示例【基于thinkPHP框架】

    Administrator@QCEE61NZ66FEX2D /cygdrive/c/wamp/www/thinkphp/Home/Tpl/Login $ ls

    砸漏
  • tp5框架使用cookie加密算法实现登录功能示例

    本文实例讲述了tp5框架使用cookie加密算法实现登录功能。分享给大家供大家参考,具体如下:

    砸漏
  • Laravel Vue 前后端分离 使用token认证

    在做前后台分离的项目中,认证是必须的,由于http是无状态的。前台用户登录成功后,后台给前台返回token。之后前台给后台发请求每次携带token。

    mafeifan
  • Laravel框架基于中间件实现禁止未登录用户访问页面功能示例

    本文实例讲述了Laravel框架基于中间件实现禁止未登录用户访问页面功能。分享给大家供大家参考,具体如下:

    砸漏
  • 微信小程序授权获取用户详细信息openid

    Incorrect string value: ‘\xF0\x9F\x98\x83 <…’ for column ‘summary’ at row 1

    李才哥
  • laravel5实现微信第三方登录功能

    最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4。

    砸漏
  • Laravel使用gregwar/captcha生成验证码

    laravel框架自身并不携带验证码类,我这里采用开源的gregwar/captcha,来做验证码,并判断是否可以登录。

    Meng小羽
  • laravel5.4利用163邮箱发送邮件的步骤详解

    前言 其实发送邮箱其实不难,不如说挺简单的,本文将详细介绍关于laravel5.4用163邮箱发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起...

    用户2323866
  • Python爬虫之模拟登录京东商城

    首先感谢大家的大力支持,博主会持续更新精彩文章,分享更多技术干货。另外,最近在新建的QQ群中结识了一些朋友,气氛很好,大家互相分享技术内容,博主也从中收获了不少...

    Python数据科学
  • .NET ORM 的 “SOD蜜”--零基础入门篇

    PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SO...

    用户1177503
  • 15.Django基础十一之认证系统

      我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情...

    changxin7
  • Swift3.0服务端开发(五) 记事本的开发(iOS端+服务端)

    前边以及陆陆续续的介绍了使用Swift3.0开发的服务端应用程序的Perfect框架。本篇博客就做一个阶段性的总结,做一个完整的实例,其实这个实例在《Swift...

    lizelu
  • Flask表单之WTForms和flask-wtf

    Flask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。还有其它一些功能:CSRF保...

    菲宇
  • [NewLife.XCode]角色权限

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCo...

    大石头
  • Django-多对多关系的三种创建方式-forms组件使用-cookie与session-08

    写法和写模型表类极其相似,但是 forms 组件的字段有约束,模型表类的字段没有约束 from django import forms class...

    suwanbin
  • 带你认识 flask 用户登录

    在第四章中,用户模型设置了一个password_hash字段,到目前为止还没有被使用到。这个字段的目的是保存用户密码的哈希值,并用于验证用户在登录过程中输入的密...

    公众号---人生代码
  • AuthCov:Web认证覆盖扫描工具

    AuthCov使用Chrome headless browser(无头浏览器)爬取你的Web应用程序,同时以预定义用户身份进行登录。在爬取阶段它会拦截并记录AP...

    FB客服
  • 【Redis实战】快速简单搭建聊天室03——实现登陆功能

    要使用Redis,首先需要创建Redis到连接实例。连接实例创建在__init__()方法中,以方便在整个RedisUtil类中进行调用。

    青南

扫码关注云+社区

领取腾讯云代金券