Laravel6:自定义多字段登录,用户名,邮箱等

废话不多说,直接上干货【亲测有效!】#

  1. App 下创建 Traits 目录

  2. 创建 AuthenticatesUsers.php 文件

  3. <?php
    namespace App\Traits;
    use Illuminate\Foundation\Auth\AuthenticatesUsers as LaravelAuthenticatesUsers;
    trait AuthenticatesUsers
    {
     use LaravelAuthenticatesUsers;
    
     static public function username()
     {
         // 获取用户提交数据
         $username = request()->get('username');
         // 判断用户提交的数据,检测应该使用哪种方式登录
         switch ($username) {
             case filter_var($username, FILTER_VALIDATE_EMAIL):
                 return 'email';
                 break;
             case preg_match("/^1[34578]\d{9}$/", $username) == 1:
                 return 'mobile';
                 break;
             default:
                 return 'username';
                 break;
         }
     }
    }
  4. LoginController.php 中不需要定义 username () 方法

  5. 应用:

     在自己的控制器中引用 
    use App\Traits\AuthenticatesUsers;
    ......
    //用户登录
    
     public function login(Request $request)
     {
         $loginMark = AuthenticatesUsers::username();
         $token = Auth::guard('api')->attempt([$loginMark => $request->username, 'password' => $request->password]);
         if ($token) {
             return $this->setMessage('登录成功!' . $loginMark)->setStatusCode(201)->success(['token' => 'bearer ' . $token]);
         }
         return $this->failed('账号或密码错误!', 400);
     }
  6. 测试
    (1). 手机号
    Laravel6:自定义多字段登录,用户名,邮箱等
    Laravel6:自定义多字段登录,用户名,邮箱等
    (2). 邮箱
    Laravel6:自定义多字段登录,用户名,邮箱等
    Laravel6:自定义多字段登录,用户名,邮箱等
    (3). 用户名
    Laravel6:自定义多字段登录,用户名,邮箱等
    Laravel6:自定义多字段登录,用户名,邮箱等

  7. 完结!

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 3
Jianne

响应的数据结构不错喔~

4年前 评论

这个方法不错,判断格式决定用哪个字段解析,省去了数据库判断,也不用考虑 auth 多字段了

3年前 评论