微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

前言

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

以下内容基于laravel5.4

方法如下:

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

PHP artisan make:auth

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

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

rush:PHP;"> namespace 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方法,我们只要重写这个方法即可,先看看原来的是怎么写的,根据原来的进行重写:

    guard()->attempt( $this->credentials($request),$request->has('remember') ); }

    在LoginController重写后:

    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,$request->has('remember')
    );
    if ($mobileLogin) {
    return true;
    }

    // 验证邮箱登录方式
    $emailLogin = $this->guard()->attempt(
    ['email' => $username,$request->has('remember')
    );
    if ($emailLogin) {
    return true;
    }

    return false;
    }

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

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

    总结

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

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐


    laravel的dd函数不生效怎么办
    看不懂laravel文档咋办
    安装laravel框架出现command怎么办
    Laravel开发API怎么使用事务
    laravel怎么构建复杂查询条件
    laravel如何实现防止被下载
    为什么laravel比yii火
    一些常见的Laravel定时任务不运行的问题
    laravel用路由有什么好处
    composer无法安装laravel怎么办