首页 > 解决方案 > Laravel 8,User = null,但会话仍有“_token”,会话持久性问题?

问题描述

问题:

在成功的初始“csrf-cookie”和“登录”请求之后,经过身份验证的用户似乎从所有后续请求的会话中消失。

$request->user()并且Auth::user()全部auth()-user()返回null

$request->session()->all()只返回一个“_token”字段,$request->session()->has('users')并且$request->session()->has('user')都返回false

语境:

这只发生在我的生产服务器上(我已经尝试了 Laravel Forge 服务器和我自己的服务器手动设置 Nginx)。

这是一个 SPA 后端,使用 Laravel 8。使用 Laravel 内置的 Sanctum 身份验证。使用数据库会话驱动程序(虽然我已经尝试了所有其他驱动程序,但驱动程序似乎不是问题,我可以在我的数据库中看到会话)。

我当前的会话配置(尽管我尝试了其他配置无济于事):

same_site = 'none'
domain = null
secure = true
http_only = true

我试过的:

无数的谷歌搜索,没有发现任何似乎适用于我的情况的问题或解决方案。

我已经尝试在问题发生之前和之后立即挖掘会话并请求对象(如问题部分所述)并且没有以这种方式获得任何有用的信息。

我尝试过使用会话配置...更改“相同站点”、“安全”等变量。

标签: phplaravelhttpsessionlaravel-8

解决方案


我发现了问题,结果非常简单/愚蠢:我必须将\Illuminate\Session\Middleware\AuthenticateSession::class中间件添加到我的路由中(特别是对我来说,在这种情况下它是添加到 'api' 中间件组)。


推荐阅读