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
中间件。
我在玩 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
中间件。