如何使用 DRF JWT 实现记住我的功能?

Posted

技术标签:

【中文标题】如何使用 DRF JWT 实现记住我的功能?【英文标题】:How to implement Remember me functionality with DRF JWT? 【发布时间】:2019-02-16 07:33:14 【问题描述】:

我正在尝试使用 JWT DRF 实施实现一种让用户保持登录我的网站的方法。

documentation 建议,一旦令牌过期,就无法刷新它们。

鉴于用户可能会关闭他们的浏览器,我仅有的两个选项是使用长期令牌或将用户名/密码存储在 localStorage 中,这两个选项似乎都不安全。

有没有不同的方法来实现这一点?或者,有没有一种方法可以根据用户的需要(即选择记住我选项)只拥有长期存在的令牌

【问题讨论】:

我认为您需要实现一些自定义中间件类并检查每个请求中的令牌到期时间。如果它即将到期,请重定向到某个页面(我不确定重定向是否可行)或引发一些友好的异常 这是用户在线时的正常工作流程,我正在尝试在用户离线时找到一种方法,以便他们在返回时保持登录状态 【参考方案1】:

是的,JWT 仅用于对会话进行短期身份验证,即使刷新也是如此。如果您正在为浏览器设计,我建议您使用常规的旧 SessionAuthentication 以保持用户长期登录(例如 30 天)。

如果您想避免使用 cookie,您可以结合使用短期和长期令牌,例如 OAuth2 - 查看与 DRF 集成的 Django OAuth Toolkit。短期令牌就像 JWT 一样对会话进行身份验证,而长期令牌(30-60 天的生命周期)用于从您的 API 获取短期令牌并可以存储在 localStorage 中。

【讨论】:

以上是关于如何使用 DRF JWT 实现记住我的功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DRF 测试中使用 JWT 令牌?

AngularJS 使用 JWT Auth 记住我的功能

Django Rest Framework(DRF) Json Web Token(JWT) 身份验证和登录过程

drf-jwt认证组件权限组件频率组件的使用

如何在 DRF 中使用身份服务器 4 验证 JWT 令牌?

DRF:如何将 django-rest-framework-jwt 集成到 Djoser