gpt4 book ai didi

php - 在 Exceptions\Handler.php 中访问 Auth

转载 作者:可可西里 更新时间:2023-11-01 13:44:51 26 4
gpt4 key购买 nike

我正在尝试从 App\Exceptions\Handler 类 (app/Exceptions/Handler.php) 的渲染方法中访问 Auth 类以确定如果用户当前已登录,则使用 Auth::check() 方法。

这在 5.1 中运行良好,但我已经升级到 5.2 并且它不再有效。

为了调试它,我一直在打印 Auth::user() 到日志(返回 NULL),然后将 redirect() 返回到另一个 View 。

然后从 View / Controller 重定向到,将相同的 Auth::user() 打印到日志,这按预期工作并返回登录用户。

因此,从 Exceptions\Handler 类中访问 Auth 类或 user() 方法似乎没有问题,只是它出于某种原因返回 NULL,而应用程序的其他部分返回用户..

感谢您提供这方面的任何信息!

最佳答案

发生这种情况是因为 StartSession 中间件位于 $middlewareGroups(应用程序的路由中间件组)中,因此您无权访问经过身份验证的用户,因为初始化 session 的中间件在生命周期中比 ExceptionHandler 启动得晚。

app\Kernel.php 文件中,移动这一行:

 \Illuminate\Session\Middleware\StartSession::class,

$middlewareGroups到全局堆栈$middleware。这些中间件在您的应用程序的每个请求期间运行,因此,在此之后,Auth::user() 将起作用。


WARNING: With this solution you will not be able to use the cookie session driver. Works well with file and others.


更新:

如果你仍然需要在全局栈$middleware中使用StartSession并且你还需要cookie session driver,你必须从中移动三个中间件$middlewareGroup$middleware 的下一个顺序:

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

关于php - 在 Exceptions\Handler.php 中访问 Auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34982471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com