auth()方法null异常

时间:2017-06-02 18:05:22

标签: php laravel laravel-5 laravel-authorization

我正在玩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在启动后获得登录用户,异常请求并且不知道还有什么。

1 个答案:

答案 0 :(得分:4)

这是因为会话由web中间件组初始化。当找不到路由时,中间件永远不会被初始化。因此,应用程序无法从会话中找到经过身份验证的用户。

虽然有针对性的解决方法。将会话和cookie中间件从web中间件组移动到全局中间件似乎解决了这个问题。但缺点是应用程序中的每个路由都默认启用了会话和cookie。如果你有api路线,这可能会有问题。

移动(不要复制)这些路由从web中间件组($middlewareGroups)到全局中间件列表($middleware)。< / p>

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

如果您不想在错误页面中使用remember_token检测用户,则可以跳过EncryptCookies中间件。