laravel入門實戰開發(五):自定義多字段登錄,用戶名,郵箱等

  • 上一節,我們完成了自定義登錄,現在許多網站不光是用戶名可以登錄,郵箱、手機號都可以登錄
  • 這一節,我們繼續完善登錄,實現多字段登錄

在登錄源碼分析那一節,我們分析登錄成功驗證主要attemptLogin有關,我們來具體分析

protected function attemptLogin(Request $request)
{
    return $this->guard()->attempt(
        $this->credentials($request), $request->filled('remember')
    );
}
  1. guard()可以簡單理解將使用那個用戶庫,有些系統會出現多種用戶表的時候,如管理員,企業用戶,普通用戶
  2. attempt 將提交的登錄數據與數據庫中用戶的數據比對,先查詢用戶名在比對密碼,比對上返回true反則false
  • 在login方法中是通過true來判斷是否登錄成功
    我們按照這個思路,只需要將多個字段都進行比對,只要有一個比對上就返回true,都沒匹配上就返回false
    默認的users表有name和email兩個登錄字段,當然我們也可以自己加入手機號等其他字段,這裏就以name和email爲例重寫attemptLogin方法

如果已經登入可以清楚瀏覽器數據,也可以在測試控制器index中
return \Auth()->logout();再訪問就退出了

<?php

namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{


    use AuthenticatesUsers;

    protected $redirectTo = '/admin';


    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

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

    public function showLoginForm()
    {
        return view('admin.auth.login');
    }

    public function attemptLogin(Request $request)
    {
        $username = $request->input('name');
        $password = $request->input('password');

        // 驗證用戶名登錄方式
        $usernameLogin = $this->guard()->attempt(
            ['name' => $username, 'password' => $password], $request->filled('remember')
        );
        if ($usernameLogin) {
            return true;
        }
        // 驗證郵箱登錄方式
        $emailLogin = $this->guard()->attempt(
            ['email' => $username, 'password' => $password], $request->filled('remember')
        );
        if ($emailLogin) {
            return true;
        }

        return false;
    }

    public function logout(Request $request)
    {
        $this->guard()->logout();

        $request->session()->invalidate();

        return redirect('/admin/login');
    }

}

在這裏插入圖片描述

在這裏插入圖片描述

  • 到這裏我們的多字段登錄就已經完成了,下一節將加入驗證碼登錄,驗證碼可以有效的防止機器操作,是一個有效的防護手段
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章