我希望将JWT令牌存储在TTL值为expiration的数据库中。当客户端使用令牌发出请求时,他会更新TTL值以延长会话。为了使会话过期,他只是从db中删除TTL。要再次登录,他将检查存在的TTL是否存在,如果它存在,他将能够登录。 这是最好的实施方式。有什么更好的方法,有什么建议吗?
注意:我不想使用auth0或oauth 2.0。
为什么在DB中存储令牌?
我可以只检查令牌,而不是每次请求验证用户名和密码。我没有为我的JWT令牌设置任何过期。为什么数据存储在我的情况下是跨不同节点维护会话
答案 0 :(得分:0)
如果您愿意稍微调整一下您的架构,我建议您使用redis来存储令牌,而不是JWT,您可以保持密钥:值对。
此处键可以是 dkajd4165f6asdfgd4as 之类的唯一ID,值可以是您以JSON示例的形式存储在JWT中的所有数据
{
userName:"XYZ",
sessionValid:true
}
redis中的每个条目都可以具有TTL值,也可以根据您的要求明确更改或销毁。这也将您的主数据库与会话管理数据库(即redis)分开,并使您无需查询主数据库即可控制会话管理。
有关详细文档,您可以访问它的官方documentation
如果您想尝试一下,可以查看this这可以作为使用redis基础知识的分步指南。
注意:这种方法不是使用JWT而是回答你的问题,建议采用另一种方法。