我使用 NextJS 开发了一个购物应用程序,并使用 NextAuth 进行身份验证。我使用
CredentialsProvider
进行自定义身份验证。一切正常。身份验证成功后,我会将 customer_id
和 name
存储在会话中。
我面临的问题是,现在我们允许客户通过支付金额来订阅我们的产品(显示在我们的 NextJS 应用程序中)。因此,当付款成功时,我将在该特定客户的数据库中将
is_subscribed
字段存储为 true
。那么对于客户端显示部分,我应该将这个字段值存储在session中吗?
我发现的缺点是,如果取消订阅,则客户会话也需要更新。顺便说一句,我在 NextAuth 中使用 JWT 进行会话存储。因此,令牌的有效期默认设置为 7 天。因此,对于已经登录的客户,令牌将在 7 天后才会更新。
如何解决这种情况?
在这样的场景中,您需要依赖服务器数据作为事实来源,为了 UI 的缘故,您仍然可以在会话中保留一些内容,但是每当用户需要发出请求时,甚至您可以设置定期/间隔调用到您的用于检查订阅状态(如果为真)的 API,然后您可以继续用户进行更改。