欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Laravel 5.5 实现用户名姓名 + 邮箱 + 手机号登录 多字段登录 有大用

Laravel 实现用户名 + 邮箱 + 手机号登录

96 
晨曦入诗 
2018.10.07 17:54* 字数 138 阅读 991评论 0

视图中将验证字段命名为 account
resources/views/auth/login.blade.php

{{ --账号-- }}
   <div class="form-group has-feedback">
        <input type="text" name="account" class="form-control" placeholder="用户名/邮箱/手机号">
        <span class="glyphicon glyphicon-user form-control-feedback"></span>
         @if( $errors->has('account') )
            <span class="help-block" style="color: #d73925">
                <strong>{{ $errors->has('account') }}</strong>
            </span>
         @endif
   </div>

接下来在 LoginController.php 重写 AuthenticatesUsers Trait 中的 attemptLogin()validateLogin()username() 三个方法。

  • attemptLogin() 方法:

将:

  return $this->guard()->attempt(
   $this->credentials($request, $request->filled('remember'))
  );

替换为:

return collect(['username','email','phone'])->contains( function ($value) use ($request) {
      $account = $request->get('username');
      $password = $request->get('password');
      return $this->guard()->attempt([ $value => $account, 'password' => $password ], $request->filled('remember'));
});
  • validateLogin() 方法:

主要将 $this->username() 改为中文。当然也可以添加自己的验证规则。

protected function validateLogin( Request $request)
{
    $this->validate($request, [
      $this->username() => 'required|string',
       'password' => 'required|string',
       'captcha' => 'required|captcha',
],[
       'captcha.required' => ':attribute 不能为空',
       'captcha.captcha' => '请输入正确的 :attribute',
],[
       $this->username() => '账号',
       'captcha' => '验证码',
]);
}
  • username() 方法:

不用说,将返回字段改为 account:

public function username()
{
    return 'account';
}

完整代码:
app/Http/Controller/Auth/LoginController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

   /**
     * Attempt to log the user into the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return bool
     */
      protected function attemptLogin( Request $request)
      {
           return collect(['username', 'email', 'phone'])->contains( function ($value) use ($request) {
                   $account = $request -> get( $this->username() );
                   $password = $request -> get('password);
                   return $this->guard()->attempt([ $value => $account, 'password' => $password], $request->filled('remember'));
           });
      }
/**
     * 登录验证.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return void
     */
     protected function validateLogin( Request $request)
     {  
            $this->validate( $request, [
                 $this->username() => 'required|string',
                 'password' => 'required|string',
                 'captcha' => 'required|captcha',
            ],[
                 'captcha.required' => ':attribute 不能为空',
                 'captcha.captcha' => ' 请输入正确的 :attribute',
            ],[
                 $this->username() => '账号',
                 'captcha' => '验证码',
            ]);
     }

     public function username()
     {
          return 'account';
     }
}

最后还有一个小问题,拷贝 overtrue/laravel-lang 语言包稍作修改:

$ mkdir resources/lang/zh-CN
$ cp vendor/caouecs/laravel-lang/src/zh-CN/auth.php resource/lang/zh-CN

resources/lang/zh-CN/auth.php

<?php

return [
    /*
    |--------------------------------------------------------------------------
    | Authentication Language Lines
    |--------------------------------------------------------------------------
    |
    | The following language lines are used during authentication for various
    | messages that we need to display to the user. You are free to modify
    | these language lines according to your application's requirements.
    |
    */

     'filled' => '账号或密码错误',
     ‘throttle’ => '您尝试的次数过多,请在 :seconds 秒后重试。',
];

小礼物走一走,来简书关注我

来自  https://www.jianshu.com/p/0623bd4be16d

普通分类: