Laravel 實現多欄位登入

來源:互聯網
上載者:User
現在很多網站都提供了這樣的功能,使用者可以通過郵箱、手機號或者暱稱來登入網站,下面是在 Laravel (以 5.1 為例)中實現該功能的方式。

下面三種方法基本原理都是相同的。

1. 方法一

使用 Laravel 內建認證系統,修改 /app/Http/Controllers/Auth/AuthController.php 檔案,重寫方法(原方法所在檔案 /vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php):

namespace App\Http\Controllers\Auth;......use Illuminate\Http\Request; // 增加該行class AuthController extends Controller{    protected $username = 'login';    ....    protected function getCredentials(Request $request)    {        $login = $request->get('login');        $field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'name';        return [            $field => $login,            'password' => $request->get('password'),        ];    }}

2. 方法二

修改 /app/Http/Controllers/Auth/AuthController.php 檔案,這也是使用 Laravel 內建認證系統的一種方法。

namespace App\Http\Controllers\Auth;......use Illuminate\Http\Request; // 增加該行class AuthController extends Controller{    // 修改這裡    use AuthenticatesAndRegistersUsers, ThrottlesLogins {        AuthenticatesAndRegistersUsers::postLogin as laravelPostLogin;    }    ......    // 增加方法    public function postLogin(Request $request)    {        $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'name';        $request->merge([$field => $request->input('login')]);        $this->username = $field;        return self::laravelPostLogin($request);    }}

3. 方法三

重寫登入功能

LoginRequest.php:

public function rules(){    return [       'login' => 'required',       'password' => 'required'    ];}

AuthController.php:

public function login(LoginRequest $request){    $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';    $request->merge([$field => $request->input('login')]);    if ($this->auth->attempt($request->only($field, 'password')))    {        return redirect('/');    }    return redirect('/login')->withErrors([        'error' => 'These credentials do not match our records.',    ]);}

該篇屬於專題:《Laravel小技巧》

  • 上一篇: 《 Laravel更改登入時使用的預設欄位名稱email》
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.