我正在玩Laravel 5.4.23,当我点击auth()
,auth()->check()
,auth()->user()
的404页面时遇到了这种情况,并且这些页面未初始化,因此返回视图中的null或其附近的任何位置。
我甚至去AppServiceProvider.php类做了一些测试,
dd(auth()->check());
在boot
方法中返回Null,即使我已登录,这对我来说也是有意义的。
这意味着,每当用户点击404页面时,导航栏等都不会呈现用户数据,例如,传统上我们在导航栏的右上方有用户配置文件按钮,就像在stackoverflow上一样,在这种情况下, Laravel,这与我所看到的不可能。
我是在正确的轨道还是我错过了什么?
在我看来,Laravel在完成我测试的请求后会尝试登录用户。
希望我能在这里找到答案。感谢。
更新
在App \ Providers \ AppServiceProvider中的boot
方法中包含手动登录尝试似乎修复了aut()命令中的空问题,但我相信这将尝试每页请求两次登录用户因为很明显Laravel在启动后获得登录用户,异常请求并且不知道还有什么。
答案 0 :(得分:4)
这是因为会话由web
中间件组初始化。当找不到路由时,中间件永远不会被初始化。因此,应用程序无法从会话中找到经过身份验证的用户。
虽然有针对性的解决方法。将会话和cookie中间件从web
中间件组移动到全局中间件似乎解决了这个问题。但缺点是应用程序中的每个路由都默认启用了会话和cookie。如果你有api路线,这可能会有问题。
移动(不要复制)这些路由从web
中间件组($middlewareGroups
)到全局中间件列表($middleware
)。< / p>
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
如果您不想在错误页面中使用remember_token检测用户,则可以跳过EncryptCookies
中间件。