2017-06-02 86 views
2

我正在玩Laravel 5.4.23,當我遇到404頁面auth(),auth()->check(),auth()->user(),並且這些未初始化,因此在視圖中返回null,附近的任何地方。auth()方法null異常

我還跟AppServiceProvider.php類做一些測試,

dd(auth()->check()); 

回報在boot法空,即使我登錄,這使得0了意義。

這意味着,無論何時用戶點擊404頁面,navbars等都不會呈現用戶數據,例如,傳統上我們在navbar的頂部右側有用戶配置文件按鈕,就像這裏在stackoverflow上那樣在Laravel,這是不可能的,我所看到的。

我在正確的軌道上還是錯過了什麼?

在我看來,Laravel嘗試在完成我測試的請求後登錄用戶。

希望我在這裏找到答案。

謝謝。

UPDATE:

包括在app \提供商的boot方法手動登錄嘗試\ AppServiceProvider似乎解決空問題的AUT()命令,但我相信,這將嘗試登錄的用戶每頁請求兩次,因爲顯然Laravel在啓動後獲取登錄用戶,異常請求和不知道其他內容。

回答

2

發生這種情況是因爲會話由web中間件組初始化。當找不到路由時,中間件不會被初始化。因此,應用程序無法從會話中找到經過身份驗證的用戶。

雖然有一個解決方法。將會話和cookie中間件從web中間件組移動到全局中間件似乎解決了這個問題。但缺點是應用程序中的每條路線都默認啓用會話和Cookie。如果你有API路線,這可能會有問題。

MOVE(不要複製),這些航線從web中間件組($middlewareGroups)全球中間件列表($middleware)。

\App\Http\Middleware\EncryptCookies::class, 
\Illuminate\Session\Middleware\StartSession::class, 

可以跳過EncryptCookies中間件,如果你不想使用自己的remember_token在你的錯誤頁面,以檢測用戶。

+0

這仍然不能解決在AppServiceProvider,Auth :: check()仍然返回false的問題,它在處理程序,但不是在appserviceprovider中工作,我試圖查看laravel源代碼,看看是否有一個可能的方式在其餘的之前加載Auth – Emad

+0

爲什麼你想要在服務提供商的auth用戶? – Sandeesh

+0

我並不真的需要它,我只是想和laravel源代碼哈哈一塌糊塗,所以我試圖找出如何工作的事情,到目前爲止,您的解決方案工作,我仍然在他們的源代碼檢查,每週1次這裏laravel用戶:)昨天 – Emad