![](/img/trans.png)
[英]Laravel 5.1: Auth::attemp() success but Auth::check() return 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.