久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

基于Laravel5.4實(shí)現(xiàn)多字段登錄功能方法示例

最近在工作中遇到一個(gè)需求,需要實(shí)現(xiàn)多字段登錄的一個(gè)效果,就是可以使用手機(jī)或者郵箱任一種方式的登錄,現(xiàn)在將解決的過程分享出來(lái),所以這篇文章主要給大家介紹了基于Laravel

前言

最近在一個(gè)項(xiàng)目中需要實(shí)現(xiàn)一個(gè)多字段登錄功能,簡(jiǎn)單來(lái)說就是可以使用用戶名、郵箱或手機(jī)號(hào)任意一種方式進(jìn)行登錄。所以本文就來(lái)給大家介紹了關(guān)于Laravel5.4多字段登錄的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),話不多說了,來(lái)一起看看詳細(xì)的介紹吧。

以下內(nèi)容基于laravel5.4

方法如下:

首先,通過artisan工具生成auth模塊

php artisan make:auth

這時(shí)候App\Http\Controllers目錄下會(huì)新增一個(gè)Auth目錄,該目錄下為注冊(cè)登錄相關(guān)的控制器,resources\views目錄下也會(huì)生成一些與注冊(cè)登錄相關(guān)的視圖

laravel的官方文檔中說手動(dòng)認(rèn)證用戶需要使用Illuminate\Support\Facades\Auth類的attempt方法,如下:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
 /**
  * Handle an authentication attempt.
  *
  * @return Response
  */
 public function authenticate()
 {
  if (Auth::attempt(['email' => $email, 'password' => $password])) {
   // Authentication passed...
   return redirect()->intended('dashboard');
  }
 }
}

這個(gè)方法會(huì)根據(jù)你傳入的參數(shù)判斷數(shù)據(jù)庫(kù)中是否存在與之相匹配的用戶,如果存在并且密碼正確返回true,反之返回false

遂在LoginController中添加該方法,但是好像并沒有效果

于是開始觀察LoginController的實(shí)現(xiàn)機(jī)制,發(fā)現(xiàn)它實(shí)現(xiàn)了一個(gè)AuthenticatesUsers的trait,追蹤到這個(gè)trait的定義文件,發(fā)現(xiàn)這個(gè)文件就是我們想要的東西

里面有一個(gè)login方法,就是負(fù)責(zé)處理登錄的邏輯

/**
  * Handle a login request to the application.
  *
  * @param \Illuminate\Http\Request $request
  * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response
  */
 public function login(Request $request)
 {
  // 表單驗(yàn)證
  $this->validateLogin($request);

  // If the class is using the ThrottlesLogins trait, we can automatically throttle
  // the login attempts for this application. We'll key this by the username and
  // the IP address of the client making these requests into this application.
  // 防止暴力破解,多次登錄失敗會(huì)根據(jù)IP鎖定
  if ($this->hasTooManyLoginAttempts($request)) {
   $this->fireLockoutEvent($request);

   return $this->sendLockoutResponse($request);
  }
  
  // 這個(gè)就是主要的負(fù)責(zé)判斷數(shù)據(jù)庫(kù)中是否存在相應(yīng)的賬號(hào)和密碼的地方,我們需要重寫的就是attemptLogin方法
  if ($this->attemptLogin($request)) {
   return $this->sendLoginResponse($request);
  }

  // If the login attempt was unsuccessful we will increment the number of attempts
  // to login and redirect the user back to the login form. Of course, when this
  // user surpasses their maximum number of attempts they will get locked out.
  // 登錄失敗,失敗次數(shù)++,防止暴力破解
  $this->incrementLoginAttempts($request);

  // 返回失敗響應(yīng)
  return $this->sendFailedLoginResponse($request);
 }

分析了一波這個(gè)文件,發(fā)現(xiàn)主要進(jìn)行登錄判斷的就是attemptLogin方法,我們只要重寫這個(gè)方法即可,先看看原來(lái)的是怎么寫的,根據(jù)原來(lái)的進(jìn)行重寫:

/**
  * Attempt to log the user into the application.
  *
  * @param \Illuminate\Http\Request $request
  * @return bool
  */
 protected function attemptLogin(Request $request)
 {
  return $this->guard()->attempt(
   $this->credentials($request), $request->has('remember')
  );
 }

在LoginController重寫后:

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

  // 驗(yàn)證用戶名登錄方式
  $usernameLogin = $this->guard()->attempt(
   ['username' => $username, 'password' => $password], $request->has('remember')
  );
  if ($usernameLogin) {
   return true;
  }

  // 驗(yàn)證手機(jī)號(hào)登錄方式
  $mobileLogin = $this->guard()->attempt(
   ['mobile' => $username, 'password' => $password], $request->has('remember')
  );
  if ($mobileLogin) {
   return true;
  }

  // 驗(yàn)證郵箱登錄方式
  $emailLogin = $this->guard()->attempt(
   ['email' => $username, 'password' => $password], $request->has('remember')
  );
  if ($emailLogin) {
   return true;
  }

  return false;
 }

只需要用attempt方法進(jìn)行多次判斷即可,只要成功就返回true,不成功繼續(xù)用其他字段進(jìn)行判斷,都不成功則返回flase

測(cè)試,可以實(shí)現(xiàn)多字段登錄效果

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)的支持。

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關(guān)于Laravel中unique和exists驗(yàn)證規(guī)則的優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面
最近在使用laravel5.5,利用其實(shí)現(xiàn)了一個(gè)功能,下面分享給大家,這篇文章主要給大家介紹了關(guān)于Laravel 5.5基于內(nèi)置的Auth模塊如何實(shí)現(xiàn)前后臺(tái)登陸的相關(guān)資料,文中通過示例代碼介紹的非
laravel 的隊(duì)列服務(wù)對(duì)各種不同的后臺(tái)隊(duì)列服務(wù)提供了統(tǒng)一的 API,下面這篇文章通過源碼分析給大家介紹了關(guān)于 Laravel 重復(fù)執(zhí)行同一個(gè)隊(duì)列任務(wù)的原因,文中通過示例代碼介紹的非常詳細(xì)
這篇文章主要給大家介紹了關(guān)于 Laravel Redis 多個(gè)進(jìn)程同時(shí)取隊(duì)列問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來(lái)
主站蜘蛛池模板: 又黑又粗又长的欧美一区 | 精品乱码一区二区三四区 | 五月婷婷色 | 中文字幕高清视频 | 精品无码久久久久久国产 | 亚洲精品成人 | 精品av | 亚洲国产日韩欧美 | 日日操夜夜操视频 | 天天爽夜夜骑 | 国产美女视频一区 | 免费小视频在线观看 | 国产在线一区二区三区 | 国产精品特级毛片一区二区三区 | 男人的天堂亚洲 | 狠狠爱免费视频 | 久久91精品国产一区二区三区 | 亚洲视频免费在线看 | 99re视频在线观看 | 一区二区三区高清在线观看 | 国产精品久久久久久久免费大片 | 成人欧美一区二区三区视频xxx | 欧美日本韩国一区二区三区 | 亚洲欧美一区二区在线观看 | 欧美一区二区三区的 | 成人午夜在线 | 国产乱码久久久久久一区二区 | 欧美综合网 | 成人精品 | 啪一啪 | 欧美日韩国产在线 | 国产精品国产三级国产aⅴ中文 | 久久久久久久av | 这里精品| 欧美精品1区 | 亚洲电影一区二区三区 | 又黑又粗又长的欧美一区 | 一级a爱片性色毛片免费 | 国产午夜精品一区二区三区四区 | 国产一级视频在线播放 | 成人精品一区二区三区 |