簡體   English   中英

在Laravel中獲取Auth用戶ID

[英]Getting Auth User ID in Laravel

如果用戶登錄Laravel 5.1,我們可以訪問用戶ID

Auth::user()->id

在我之前的應用程序(不是laravel)中,當用戶登錄時,我正在為userid注冊會話。 我正在檢查$ _SESSION ['user_id']是否可用。

我想問一下,當我調用Auth::user()->id是否為每個請求生成和sql查詢? 如果它確實對表現不利。

我應該注冊一個新的會話嗎?

Session::put('user_id', Auth::user()->id);

為了表現。

或Auth:user() - > id是最佳選擇?

您可以使用Auth::id()代替。 這會從會話中抓取它。 如果會話中不存在,則它將運行查詢並從數據庫中獲取它。

這不是一個真正的答案,但它打算顯示Auth::id()如何工作。 將以下路由添加到web.php

Route::get('/fake', function () {
  \DB::enableQueryLog();
  Auth::id();
  dump(\DB::getQueryLog());
});

現在,導航到/fake ,這會產生如下結果:

array:1 [▼
  0 => array:3 [▼
    "query" => "select * from `users` where `id` = ? limit 1"
    "bindings" => array:1 [▼
      0 => 284
    ]
    "time" => 15.37
  ]
]

我一遍又一遍地嘗試了這一點,似乎Auth::id()總是查詢數據庫,而不是以某種方式在會話中緩存結果(我使用的是Laravel 5.6,PHP 7.2.3和MariaDB 10.2.14) )。

為了確認,我還啟用了MariaDB日志記錄功能 ,我得到了:

180611 12:08:10    77 Connect   user@localhost as anonymous on dbname
           77 Query use `dbname`
           77 Prepare   set names 'utf8mb4' collate 'utf8mb4_unicode_ci'
           77 Execute   set names 'utf8mb4' collate 'utf8mb4_unicode_ci'
           77 Close stmt    
           77 Prepare   set time_zone="+04:30"
           77 Execute   set time_zone="+04:30"
           77 Close stmt    
           77 Prepare   set session sql_mode='NO_ENGINE_SUBSTITUTION'
           77 Execute   set session sql_mode='NO_ENGINE_SUBSTITUTION'
           77 Close stmt    
           77 Prepare   select * from `users` where `id` = ? limit 1
           77 Execute   select * from `users` where `id` = 284 limit 1
           77 Close stmt    
           77 Quit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM