Laravel 8 用戶提供者契約

2021-07-17 17:18 更新

Illuminate\Contracts\Auth\UserProvider 實現(xiàn)僅負責從 MySQL、Riak 等持久化存儲系統(tǒng)中提取 Illuminate\Contracts\Auth\Authenticatable 實現(xiàn)。無論用戶如何存儲及用于表示它的類是什么類型,這兩個接口都允許 Laravel 身份驗證機制繼續(xù)運行:

我們來看看 Illuminate\Contracts\Auth\UserProvider 契約:

<?php

namespace Illuminate\Contracts\Auth;

interface UserProvider
{
    public function retrieveById($identifier);
    public function retrieveByToken($identifier, $token);
    public function updateRememberToken(Authenticatable $user, $token);
    public function retrieveByCredentials(array $credentials);
    public function validateCredentials(Authenticatable $user, array $credentials);
}

retrieveById 函數(shù)通常接受用于表示類的 key ,如 MySQL 數(shù)據(jù)庫中自動遞增的 ID 作為參數(shù),并獲取和返回與這個 ID 匹配的 Authenticatable 實現(xiàn)。

retrieveByToken 函數(shù)通過用戶的唯一 $identifier 和存儲在 remember_token 列的 「記住我」 令牌獲取用戶。與前一方法相同,它返回 Authenticatable 實現(xiàn)。

updateRememberToken 方法用新 $token 更新 $userremember_token 列。在「記住我」登錄校驗成功或者用戶登出時分配「刷新令牌」。

在嘗試登錄到應用時,retrieveByCredentials 方法接受憑證數(shù)組傳遞給 Auth::attempt 方法。此方法在底層持久化存儲中「查詢」與這些憑證匹配的用戶。通常,此方法運行一個基于 $credentials['username'] 的 「where」 條件,它應該返回一個 Authenticatable 實現(xiàn)。此方法不就嘗試進行任何密碼校驗或身份驗證。

validateCredentials 方法應該比較給定的 $user$credentials 來驗證用戶身份。例如,此方法或許應該使用 Hash::check 來比較 $user->getAuthPassword() 的值與 $credentials['password'] 的值。它應該返回 truefalse ,以表明用戶密碼是否有效。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號