2

我正在玩 Laravel 5.4.23,当我点击 404 页面时遇到了这种情况auth(), , auth()->check(), auth()->user(), 并且那些没有初始化因此在视图中返回 null ,或者在任何附近。

我什至去 AppServiceProvider.php 类做一些测试,

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

在方法中返回 Null boot,即使我已登录,这对我来说是 0 意义。

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

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

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

希望我在这里找到答案。

谢谢。

更新:

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

4

2 回答 2

5

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

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

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

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

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

于 2017-06-02T18:31:46.963 回答
0

您可以使用Auth外观并指定身份验证保护web。之后,您现在可以检查用户是否已通过身份验证。

例子:

@if(\Auth::guard('web')->check())
    <button>Logout</button>
@endif
于 2022-03-03T22:23:28.343 回答