【问题标题】:auth() method null on Exceptions异常上的 auth() 方法 null
【发布时间】:2017-11-04 05:20:21
【问题描述】:

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

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

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

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

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

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

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

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

谢谢。

更新:

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

【问题讨论】:

    标签: php laravel laravel-5 laravel-authorization


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 这仍然不能解决 AppServiceProvider 中 Auth::check() 仍然返回 false 的问题,它在处理程序中有效但在 appserviceprovider 中无效,我正在尝试查看 laravel 源代码看看是否有可能在其余部分之前加载 Auth
    • 为什么要对服务提供者中的auth用户呢?
    • 我真的不需要它,我只是想弄乱 laravel 源代码哈哈,所以我试图弄清楚事情是如何工作的,到目前为止你的解决方案有效,我还在检查在他们的源代码中,这里有 1 周的 laravel 用户 :)
    • 例如昨天我创建了一种新的关系,它能够处理 [Users, Freinds] 表、sender_id、receiver_id 等,它属于ToMany 无法理解,今天是身份验证错误弹出:)
    • 找到了,问题出在内核中,我将中间件复制到了全局变量,我应该将它们移到全局变量,我的错,再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2020-01-11
    • 2020-09-28
    • 2019-07-25
    • 2021-02-11
    相关资源
    最近更新 更多