亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel 5.4 中的用戶認證為什么一定要 使用 save 方法后才可以加為認證用戶?

Laravel 5.4 中的用戶認證為什么一定要 使用 save 方法后才可以加為認證用戶?

PHP
收到一只叮咚 2019-03-16 18:38:25
我在用Laravel寫一個小東西,我判斷用戶名及密碼無誤后直接實例一個用戶對象并且為這個對象賦值一些屬性。 但是這個位置必須要使用 save 方法后在數據庫中新增一條數據后才可以使用 Auth::login 方法認證,否則一直認證不了,請問為什么?
查看完整描述

3 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

當你的 User 模型在數據庫中不存在時,使用 Auth::login($user) 認證的用戶,只能在本次請求中生效。

下次請求時,你使用 Auth::user() 等方法獲取已認證的用戶,將返回 。

因為 laravle 在使用 Auth::user() 等方法獲取已認證用戶時,用兩種可能:

  1. 會在 session 驅動中獲取已認證的用戶 ID
  2. 通過當前請求的 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;
}
查看完整回答
反對 回復 2019-03-18
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

save()是用指定的模型向數據庫添加數據,Auth::login會需要去數據庫找數據來比對,數據庫沒有數據怎么比對呢。。。

查看完整回答
反對 回復 2019-03-18
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

你沒看文檔吧,ORM的添加和更新模型

查看完整回答
反對 回復 2019-03-18
  • 3 回答
  • 0 關注
  • 512 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號