我在用Laravel寫一個小東西,我判斷用戶名及密碼無誤后直接實例一個用戶對象并且為這個對象賦值一些屬性。
但是這個位置必須要使用 save 方法后在數據庫中新增一條數據后才可以使用 Auth::login 方法認證,否則一直認證不了,請問為什么?
3 回答
倚天杖
TA貢獻1828條經驗 獲得超3個贊
當你的 User 模型在數據庫中不存在時,使用 Auth::login($user) 認證的用戶,只能在本次請求中生效。
下次請求時,你使用 Auth::user() 等方法獲取已認證的用戶,將返回 空。
因為 laravle 在使用 Auth::user() 等方法獲取已認證用戶時,用兩種可能:
- 會在
session驅動中獲取已認證的用戶ID - 通過當前請求的
cookie中,獲取用戶ID
無論是那種方式,都要通過數據庫查詢該用戶 ID,把查到的用戶信息設置到當前會話中。所以你不保存用戶信息到數據庫時,使用 Auth::login($user) 認證的用戶,只能在本次請求中生效。
//默認使用的\Illuminate\Auth\SessionGuard
//獲取已認證用戶
public function user()
{
//從session驅動獲取已認證用戶ID
$id = $this->session->get($this->getName());
$user = null;
if (! is_null($id)) {
//根據ID查詢用戶信息
if ($user = $this->provider->retrieveById($id)) {
$this->fireAuthenticatedEvent($user);
}
}
//從cookie中解析用戶token + id,并查詢用戶 (略)
return $this->user = $user;
}
- 3 回答
- 0 關注
- 512 瀏覽
添加回答
舉報
0/150
提交
取消
