好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Laravel認證原理以及完全自定義認證詳解

Laravel認證原理以及完全自定義認證詳解

熱門標簽:電信外呼系統多少錢一個月 桂陽公司如何做地圖標注 代理打電話機器人 太原400電話申請流程 宿州正規外呼系統軟件 萍鄉商鋪地圖標注 合肥企業外呼系統線路 神龍斗士電話機器人 企業400電話辦理多少費用

前言

Laravel 默認的 auth 功能已經是很全面了,但是我們也經常會碰到一些需要自定義的一些情況,比如驗證的字段和默認的不匹配,比如需要能夠同時滿足 user name 和 email 認證等等。如何創建一個完全自定義的認證呢?相比一個教程,我更傾向于介紹一下工作原理,這樣在自己修改或自定義的過程中更得心應手。

Authenticatable 接口

Illuminate\Contracts\Auth\Authenticatable

Authenticatable 定義了一個可以被用來認證的模型或類需要實現的接口,也就是說,如果需要用一個自定義的類來做認證,需要實現這個接口定義的方法。

// 獲取唯一標識的,可以用來認證的字段名,比如 id,uuid
public function getAuthIdentifierName();
// 獲取該標示符對應的值
public function getAuthIdentifier();
// 獲取認證的密碼
public function getAuthPassword();
// 獲取remember token
public function getRememberToken();
// 設置 remember token
public function setRememberToken($value);
// 獲取 remember token 對應的字段名,比如默認的 'remember_token'
public function getRememberTokenName();

比如你的認證模型需要用 'token' 而不是 'password' 來作為密碼驗證,這個時候就可以修改 getAuthPassword() 方法的返回值為 'token';

Authenticatable trait

Illuminate\Auth\Authenticatable

Laravel 中定義的 Authenticatable trait,也是 Laravel auth 默認的 User 模型使用的 trait,這個 trait 定義了 User 模型默認認證標示符為 'id',密碼字段為 'password',remember token 對應的字段為 remember_token 等等。

通過重寫 User 模型的這些方法可以修改一些設置。

Guard 接口

Illuminate\Contracts\Auth\Guard

Guard 接口定義了某個實現了 Authenticatable (可認證的) 模型或類的認證方法以及一些常用的接口。

// 判斷當前用戶是否登錄
public function check();
// 判斷當前用戶是否是游客(未登錄)
public function guest();
// 獲取當前認證的用戶
public function user();
// 獲取當前認證用戶的 id,嚴格來說不一定是 id,應該是上個模型中定義的唯一的字段名
public function id();
// 根據提供的消息認證用戶
public function validate(array $credentials = []);
// 設置當前用戶
public function setUser(Authenticatable $user);

StatefulGuard 接口

Illuminate\Contracts\Auth\StatefulGuard

StatefulGuard 接口繼承自 Guard 接口,除了 Guard 里面定義的一些基本接口外,還增加了更進一步、有狀態的 Guard.

新添加的接口有這些:

// 嘗試根據提供的憑證驗證用戶是否合法
public function attempt(array $credentials = [], $remember = false);
// 一次性登錄,不記錄session or cookie
public function once(array $credentials = []);
// 登錄用戶,通常在驗證成功后記錄 session 和 cookie 
public function login(Authenticatable $user, $remember = false);
// 使用用戶 id 登錄
public function loginUsingId($id, $remember = false);
// 使用用戶 ID 登錄,但是不記錄 session 和 cookie
public function onceUsingId($id);
// 通過 cookie 中的 remember token 自動登錄
public function viaRemember();
// 登出
public function logout();

Laravel 中默認提供了 3 中 guard:RequestGuard,TokenGuard,SessionGuard.

RequestGuard

Illuminate\Auth\RequestGuard

RequestGuard 是一個非常簡單的 guard. RequestGuard 是通過傳入一個閉包來認證的。可以通過調用 Auth::viaRequest 添加一個自定義的 RequestGuard.

SessionGuard

Illuminate\Auth\SessionGuard

SessionGuard 是 Laravel web 認證默認的 guard.

TokenGuard

Illuminate\Auth\TokenGuard

TokenGuard 適用于無狀態 api 認證,通過 token 認證.

UserProvider 接口

Illuminate\Contracts\Auth\UserProvider

UserProvider 接口定義了獲取認證模型的方法,比如根據 id 獲取模型,根據 email 獲取模型等等.

// 通過唯一標示符獲取認證模型
public function retrieveById($identifier);
// 通過唯一標示符和 remember token 獲取模型
public function retrieveByToken($identifier, $token);
// 通過給定的認證模型更新 remember token
public function updateRememberToken(Authenticatable $user, $token);
// 通過給定的憑證獲取用戶,比如 email 或用戶名等等
public function retrieveByCredentials(array $credentials);
// 認證給定的用戶和給定的憑證是否符合
public function validateCredentials(Authenticatable $user, array $credentials);

Laravel 中默認有兩個 user provider: DatabaseUserProvider EloquentUserProvider.

DatabaseUserProvider

Illuminate\Auth\DatabaseUserProvider

直接通過數據庫表來獲取認證模型.

EloquentUserProvider

Illuminate\Auth\EloquentUserProvider

通過 eloquent 模型來獲取認證模型

AuthManager

Illuminate\Auth\AuthManager

Guard 用來認證一個用戶是否認證成功, UserProvider 用來提供認證模型的來源,而根據項目的 config 管理 guard 以及自定義 guard 等等功能,則是通過 AuthManager 來實現。

AuthManager 應該是有點像策略模式里面的 Context 類以及工廠方法里面的工廠,一方面管理 Guard,另外一方面通過 __call 魔術方法調用具體的策略(Guard)方法。

Auth facade 對應的實現類就是 AuthManager,AuthManager 在容器中注冊為單例,用來管理所有的 guard、user provider 以及 guard 的代理工作。

自定義認證

根據上面的知識,可以知道要自定義一個認證很簡單。

  • 創建認證模型

創建一個自定義的認證模型,實現 Authenticatable 接口;

  • 創建自定義的 UserProvider

創建一個自定義的 UserProvider,實現 UserProvider 接口,可以返回上面自定義的認證模型;

  • 創建自定義的 Guard

創建一個自定義的 Guard,實現 Guard或StatefulGuard 接口

  • 添加 guard creator 和 user provider creator 到 AuthManager 中

在 AppServiceProvider 的 boot 方法添加如下代碼:

Auth::extend('myguard', function(){
 ...
 return new MyGuard(); //返回自定義 guard 實例
 ...
});

Auth::provider('myuserprovider', function(){
 return new MyUserProvider(); // 返回自定義的 user provider
});

在 config\auth.php的 guards 數組中添加自定義 guard,一個自定義 guard 包括兩部分: driver 和 provider.

'oustn' => [
 'driver' => 'myguard',
 'provider' => 'myusers',
],

在 config\auth.php的 providers 數組中添加自定義 user provider.

'myusers' => [
 'driver' => 'myuserprovider' // 里面具體的字段可以根據你創建 user provider 需要的信息自由添加,可以通過 Auth::createUserProvider('myuserprovider') 創建
],

設置 config\auth.php 的 defaults.guard 為 oustn.

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • Laravel6.2中用于用戶登錄的新密碼確認流程詳解
  • Laravel 5框架學習之模型、控制器、視圖基礎流程
  • Laravel 5.4重新登錄實現跳轉到登錄前頁面的原理和方法
  • Laravel中間件實現原理詳解
  • Laravel模型事件的實現原理詳解
  • 淺談Laravel隊列實現原理解決問題記錄
  • Laravel框架隊列原理與用法分析
  • Laravel框架生命周期與原理分析
  • laravel框架模型中非靜態方法也能靜態調用的原理分析
  • 淺談laravel aliases別名的原理
  • laravel 框架執行流程與原理簡單分析

標簽:太原 廊坊 綏化 辛集 崇左 衡陽 鄂州 白銀

巨人網絡通訊聲明:本文標題《Laravel認證原理以及完全自定義認證詳解》,本文關鍵詞  Laravel,認證,原理,以及,完全,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Laravel認證原理以及完全自定義認證詳解》相關的同類信息!
  • 本頁收集關于Laravel認證原理以及完全自定義認證詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 别揉我奶?啊?嗯高潮张秘书| 好爽?好紧?再深一点电视剧| 国产精品福利片一、二区 | 华泰影院精品三级| 亚洲AⅤ欧洲AV国产综合图片| 一对一视频聊天| xxxwww在线观看视频| 耻辱の女教师大桥未久| 国产精品??????同| 欧美日韩色综合网站 | 不许穿内裤随时挨c调教h苏绵 | 国产伦精品一区二区三区电影动画 | 中文字幕日韩哦哦哦| 10种bb| 校花好紧?好大?好爽| 我把同桌裙子撩开摸内内| 中国男同浪小辉gaysex| 蜜臀av国内精品久久久夜夜快色 | 被男人吃奶添下面好舒服| 91免费国产在线观看| 中文字幕人妻熟女人妻a?片| 美女露胸不打马赛克| 啪啪亚洲| 亚洲AV综合色区无码三区50| 夜晚玩弄亲女小妍h文| 亚洲精品二区中文字幕| 都市三代欲乱肉乱小说| 福利电影一区二区| 欧美日韩国产一区二区三区| 狠狠色丁香婷婷综合潮喷| 耻辱にまみれた失禁调教| 免费一级毛片在线播放不收费| 大浴池搓澡工gay| 免费h视频| 365天电影在线播放免费观看| 色欲av蜜臀一区二区三区多| 啊啊啊好多水啊| 黄色片在线看| 胸网站| 年轻女教师波多野结衣| 少妇高潮流白浆喷水的A片出|