auth() 方法 null on Exceptions

auth() method null on Exceptions

我在玩 Laravel 5.4.23,当我点击 404 页面 auth()auth()->check()auth()->user() 时,我遇到了这种情况,但这些都不是已初始化,因此在视图中或附近的任何地方返回 null。

我还去AppServiceProvider.phpclass做了一些测试,

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

returns boot 方法中为空,即使我已登录,这对我来说是 0。

这意味着,每当用户点击 404 页面时,导航栏等将不会呈现用户数据,例如,传统上我们在导航栏的右上角有用户配置文件按钮,就像在 Whosebug 上一样,在那在 Laravel 的情况下,我所看到的是不可能的。

我是在正确的轨道上还是错过了什么?

在我看来,Laravel 尝试在完成我测试的请求后让用户登录。

希望我能在这里找到答案。

谢谢。

更新:

在 App\Providers\AppServiceProvider 的 boot 方法中包含手动登录尝试似乎解决了 aut() 命令中的空问题,但我相信这将尝试让用户登录两次页面请求,因为显然 Laravel 在启动后获取登录用户,异常请求和不知道还有什么。

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

虽然有一个解决方法。将会话和 cookie 中间件从 web 中间件组移至全局中间件似乎可以解决此问题。但缺点是应用程序中的每条路由都默认启用会话和 cookie。如果您有 api 条路线,这可能会有问题。

MOVE(不要复制)这些路由从web中间件组($middlewareGroups)到全局中间件列表($middleware ).

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

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