Laravel 實(shí)現(xiàn)用戶名 + 郵箱 + 手機(jī)號(hào)登錄

視圖中我將待驗(yàn)證字段命名為 account。

resources/views/auth/login.blade.php

<form action="{{ route('login') }}" method="post">
    {{ csrf_field() }}

    {{--賬號(hào)--}}
    <div class="form-group has-feedback">
        <input type="text" name="account" class="form-control" placeholder="用戶名/郵箱/手機(jī)號(hào)">
        <span class="glyphicon glyphicon-user form-control-feedback"></span>
        @if ($errors->has('account'))
             <span class="help-block" style="color: #d73925;">
                 <strong>{{ $errors->first('account') }}</strong>
             </span>
         @endif
    </div>
...
</form>

接下來在 LoginController.php 重寫 AuthenticatesUsers trait 中的 attemptLogin()、validateLogin()、username()、三個(gè)方法。

attemptLogin() 方法:

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

替換為

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'));
});

validateLogin() 方法:

主要是將 $this->username() 改為中文。當(dāng)然你還可以添加自己的驗(yàn)證規(guī)則。

protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->username() => 'required|string',
        'password' => 'required|string',
        'captcha' => 'required|captcha',
    ],[
        'captcha.required' => ':attribute 不能為空',
        'captcha.captcha' => '請(qǐng)輸入正確的 :attribute',
    ],[
        $this->username() => '賬號(hào)',
        'captcha' => '驗(yàn)證碼',
    ]);
}

username() 方法:

不用說,將返回字段改為 account。

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

完整代碼:

app/Http/Controllers/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'));
        });
    }

    /**
     * 登錄驗(yàn)證.
     *
     * @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' => '請(qǐng)輸入正確的 :attribute',
        ],[
            $this->username() => '賬號(hào)',
            'captcha' => '驗(yàn)證碼',
        ]);
    }

    public function username()
    {
        return 'account';
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容