You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django REST Framework如何实现用户登录设备列表及会话终止功能

功能可行性结论

完全可以通过Django REST Framework(DRF)实现该需求,核心逻辑围绕登录会话的持久化存储、设备信息采集、会话生命周期管理三个模块实现即可。

核心实现思路
  • 扩展会话存储结构,绑定设备信息
    如果你用Django原生Session做身份认证:默认的django.contrib.sessions内置Session表缺少用户关联、设备信息等字段,你可以新建一个UserSession模型和内置Session表做一对一关联,存储字段包括:关联用户ID、设备名称、设备类型(移动端/桌面端/平板)、登录IP、登录地点、User-Agent、登录时间、最后活跃时间。
    如果你用JWT做身份认证:因为JWT本身是无状态的,需要额外建UserRefreshToken表做有效token持久化,存储字段包括:关联用户ID、refresh_token明文哈希值、设备相关信息、过期时间、是否已失效标记,也可以直接复用djangorestframework-simplejwt自带的黑名单功能减少重复开发。

  • 登录阶段采集存储设备信息
    用户调用登录接口时,从请求头解析User-Agent提取设备参数,也可以让前端主动上报设备名称、设备唯一标识(如移动端设备ID),和生成的会话/refresh token绑定后存入对应数据表,建议给用户ID字段加索引,提升后续查询速度。

  • 开发「已登录设备列表」查询接口
    实现一个需要身份校验的GET接口,仅返回当前登录用户关联的所有未过期会话/有效token对应的设备信息,返回字段可包含设备名称、设备类型、登录地点、登录时间、最后活跃时间,不要返回session_key、token等敏感信息。

  • 开发「终止指定设备会话」接口
    实现一个需要身份校验的操作接口,接收待终止的会话ID/refresh token ID为参数,校验目标会话属于当前用户后执行失效操作:

    • 原生Session认证:直接删除对应Session记录,或将其过期时间修改为当前时间
    • JWT认证:将对应refresh token加入黑名单,或直接删除UserRefreshToken表中的对应记录,若有access token缓存黑名单也可以同步清理
      可额外支持「终止所有其他设备会话」功能,只需在批量失效时排除当前请求携带的会话/token对应的记录即可。
可选优化点
  • 给异常登录的设备加风险标记,比如非常用地点登录、新设备登录的会话在列表里做特殊标注,方便用户识别非本人操作
  • 过期的会话不需要立即删除,可以归档保留,支持用户查询历史登录设备记录
  • 终止会话时可给对应设备推送通知,告知用户该设备的登录会话已被手动下线

内容的提问来源于stack exchange,提问作者Aditya Pathak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:45:06