簡體   English   中英

laravel 5.1:Auth::check 在 ServiceProvider 中返回 false

[英]laravel 5.1: Auth::check return false in ServiceProvider

我已經在尋找類似的問題,但沒有幫助我。 Auth::check總是返回 false , Auth::guest總是返回 true, auth 中間件工作正確(如果用戶登錄,則請求繼續,如果用戶未登錄,則將用戶重定向到登錄頁面)。 怎么了?

編輯:我知道它發生在提供者引導方法中,所以問題是:如何在提供者引導方法中檢查用戶登錄狀態? 這是我的提供程序啟動方法,它在所有視圖中共享一個菜單:

 public function boot(MenuController $menu_controller)
{
   //dd(\Auth::check()) DOES NOT WORK HERE

    $nav_menu = $menu_controller::roots()->get();

    view()->share('nav_menu',$menus);
}

Auth::check()使用會話來檢查User是否經過身份Auth::check()

在 Laravel 中,會話通過中間件初始化所有中間件在服務提供者啟動階段之后執行

因此,在您的服務提供商中,您無法訪問會話:它還沒有被初始化

解決方案是檢查身份驗證並在中間件中完成您的工作,然后讓該中間件在此之后執行:

\Illuminate\Session\Middleware\StartSession::class

那是啟動會話的中間件。

另一種解決方案是在服務提供者中使用帶有視圖編輯器的回調:

public function boot()
{
    //compose all the views....
    view()->composer('*', function ($view) 
    {
        //works here
        $check = \Auth::check(); 

       //other code... 
    });  
}

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

我有同樣的問題,我解決了

這是我在我的服務提供商處解決它的方法`

public function boot()
    { 
         view()->composer('partial.navbar', function($view) {
                $view->with('variabelToNavbar', $this->getVariable());
         });
    }



private function getVariable()
{
   if(\Auth::check()) {
          //some code u want
   }
}
'

所以訣竅是使用服務提供者內部的功能檢查身份驗證......它不整潔但對我有用

暫無
暫無

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

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