我们如何知道用户是不是仍然在使用 VUE/Django/JWT?

Posted

技术标签:

【中文标题】我们如何知道用户是不是仍然在使用 VUE/Django/JWT?【英文标题】:How can we know if User still active with VUE/Django/JWT?我们如何知道用户是否仍然在使用 VUE/Django/JWT? 【发布时间】:2020-11-29 17:52:27 【问题描述】:

目前我使用rest_framework_jwt来管理认证过程,查了文档Django REST framework JWT refresh-token我在下面找到了这句话,

每次用户加载页面,你可以检查是否有 现有的未过期令牌,如果它即将过期,请刷新 它以延长他们的会议。换句话说,如果一个用户是积极的 使用您的网站,他们可以保持他们的“会话”活跃

我的查询是,

    如何知道用户仍然活跃? 我们可以无限扩展这个“活动”状态吗?看起来最大刷新时间是:'JWT_EXPIRATION_DELTA' + 'JWT_REFRESH_EXPIRATION_DELTA'

配置:前端:VUE;后端:Django;后端 API:DRF

【问题讨论】:

【参考方案1】:

我的建议:

    当用户登录时,用户+密码会被发送到服务器,一旦验证,就会生成一个令牌并存储在服务器上并发送回客户端。

    客户端收到令牌后,将其存储在本地存储中。

    从那时起,每次用户向服务器发出请求时,都会将令牌附加到请求中。在服务器端,检查传入请求中的令牌,并使用服务器已经拥有的内容对其进行验证。

    如果token有效,则执行后端流程。

但是,令牌通常应该是短暂的(几个小时)。这一般应该带有一个“刷新令牌”,一个刷新令牌用于刷新访问令牌并且一般是长寿命的(几个月)。

【讨论】:

感谢 Kelvin 的建议。这里有一个问题,“每次用户向服务器发出请求”,有没有比“每次”更好的解决方案?除此之外,也许某些用户活动不需要“Auth”,他们还需要发送令牌吗? 嗨 Kumar,对于那些需要保护的端点,每次发出请求时都需要进行身份验证。因为后端需要确保来自经过身份验证的用户的请求有效。还有一些端点对匿名请求开放,对于那些,不需要检查令牌。因此,对于 Django,对于每个 API,您可能希望使用一些预定义的权限进行验证:is_anonymous、is_valid_user、is_admin 等。 感谢开尔文。您认为我们最好从前端还是后端触发“refreshToken”? 刷新令牌用于获取新的访问令牌(vs访问令牌用于获取资源)。在大多数情况下,访问令牌也会带有到期日期,因此从前端,Vue.js 应用程序将检查访问令牌是否已过期,如果已过期,它将使用刷新令牌来检索新的访问令牌 - 这个过程是通常默默地完成。如果过程失败(因为刷新令牌也已过期,因此无法获取新的访问令牌),则需要用户再次登录。 感谢Kelvin,由于目前我的声望不到15,所以不能投票,请理解。 “声望低于 15 人的投票将被记录,但不会更改公开显示的帖子得分。”

以上是关于我们如何知道用户是不是仍然在使用 VUE/Django/JWT?的主要内容,如果未能解决你的问题,请参考以下文章

在tableview中使用refreshcontrol时,如何知道用户是不是还在按住tableview?

如果我们按照 Facebook 的指示在 SDK 中指定 v1.0,那么完全不熟悉我们的 iOS 应用程序的用户是不是仍然可以使用 Facebook Graph API v1.0 登录?

如何获取用户当前的订阅状态,验证订阅是不是仍然有效?

Google 是如何收集我们的个人数据的

使用 Mercurial(分布式版本控制),我们如何知道用户名不是假的?

如何检查用户是不是验证邮件然后让登录?