簡體   English   中英

Laravel - 如何在 AppServiceProvider 中獲取當前用戶

[英]Laravel - How to get current user in AppServiceProvider

所以我通常使用Auth::user()獲取當前用戶,當我確定用戶是否實際登錄Auth::check 但是,這在我的AppServiceProvider似乎不起作用。 我正在使用它在所有視圖中共享數據。 我在登錄時同時對Auth::user()Auth::check()進行var_dump ,我得到NULLfalse

如何在AppServiceProvider獲取當前用戶? 如果這是不可能的,那么在所有視圖中獲取每個用戶唯一的數據(根據user_id不同的數據)的方法是什么。 這是我的澄清代碼。

if (Auth::check()) {
        $cart = Cart::where('user_id', Auth::user()->id);
        if ($cart) {
            view()->share('cart', $cart);

        }
    } else {
        view()->share('cartItems', Session::get('items'));
    }

Laravel 會話在中間件中初始化,因此您無法從服務提供者訪問會話,因為它們在請求生命周期中的中間件之前執行

您應該使用中間件來共享會話中的變量

如果由於其他原因您想在服務提供者中執行此操作,您可以使用帶有回調的視圖編輯器,如下所示:

public function boot()
{
    //compose all the views....
    view()->composer('*', function ($view) 
    {
        $cart = Cart::where('user_id', Auth::user()->id);

        //...with this variable
        $view->with('cart', $cart );    
    });  
}

只有在實際組合視圖時才會執行回調,因此中間件將已經執行並且會話將可用

AuthServiceProviderboot()函數中編寫這些代碼行

public function boot()
{
    view()->composer('*', function($view)
    {
        if (Auth::check()) {
            $view->with('currentUser', Auth::user());
        }else {
            $view->with('currentUser', null);
        }
    });
}

這里*表示 - 在您的所有視圖中$currentUser變量都可用。

然后,如果用戶已通過身份驗證,則從視圖文件{{ currentUser }}將為您提供用戶信息,否則為空。

根據我的 Laravel 7 經驗, Auth::user()AppServiceProvider.php不起作用,而是輔助函數auth()->user()為我解決了問題。

public function boot()
    {

        if (auth()->check()) {
            View::composer('layout.app', function ($view) {
                $userName = auth()->user()->name;
                $view->with(['userName' => $userName]);
            });
        }
    }

暫無
暫無

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

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