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 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3
Jianne

响应的数据结构不错喔~

4年前 评论

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

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!