django - 当 Knox 创建的令牌过期时如何强制注销?
问题描述
我按照 Brad Traversy 的本教程 ( https://www.youtube.com/watch?v=0d7cIfiydAc ) 使用 Knox 进行身份验证,使用 React/Redux 作为前端,开发了我的基于 Django 的带有令牌身份验证的 web 应用程序。登录/注销工作正常(这是布拉德的代码:https ://github.com/bradtraversy/lead_manager_react_django/blob/master/leadmanager/frontend/src/actions/auth.js--> 使用 POST 请求注销),除了一个问题:当用户长时间远离计算机时,令牌同时过期。因此,当用户返回时,他仍然在网站的登录区域,但是一旦他打开一个从数据库加载数据的 React 组件,控制台就会抛出 401 错误(“加载资源失败:服务器响应状态为 401(未授权)”)。然后用户必须继续“注销”并再次登录。
这不是最优的,我希望在用户返回后,系统实现令牌到期并自动将用户注销。我想到了以下方法,但我不确定如何实现它或哪种方法最好:
1)对于每个 API 请求:如果答案是 401 --> 注销(这也可能会在令牌未过期的情况下将用户注销,但如果存在其他权限问题)- 对我来说似乎不是最佳选择。
2)相反,也可以创建一个测试路线,例如 api/auth/check 使用 Django 视图,包括典型检查
permission_classes = [permissions.IsAuthenticated]
如果返回 401 --> 注销。所以这意味着对于每个数据库请求,我之前都有另一个相当不特定的数据库请求。
3) 专门检查每个 API 请求是否令牌已过期 --> 怎么做?在文档(https://james1345.github.io/django-rest-knox/)中,我找不到检查令牌有效性的方法。我在数据库表“knox_authtoken”中看到了到期日期和“digest”列中的巨大代码,但这显然是加密数据,无法与本地存储下浏览器中的令牌值进行比较。
我很高兴收到有关如何最好地实施这一点的建议!
解决方案
这可以通过多种方式完成。我没有看到自动踢出用户的原因,但如果你想这样做,你可以:
- 创建一个 URL,该 URL 仅用于每 5 秒左右检查一次身份验证是否有效
- 令牌过期后,使用 Web 套接字发送实时消息。
- 将逻辑放在前端,例如存储令牌的有效期,并运行超时,超时完成后重新定位他登录。
推荐阅读
- node.js - Asana:使用 Node 更新自定义字段值
- javascript - 在 React.createElement() 中传递参数
- java - HTTP 状态 500 – Maven 依赖项中的内部服务器错误 MediaType.APPLICATION_XML
- python - 需要借助循环对从 url 导入的多个 csv (1500 x 20) 文件的第一列执行列合并
- java - 当检查为 0 时,什么会导致外键异常?
- android - Flutter - 在 Null 上调用了方法“+”
- wordpress - 使用 Woocommerce 导出时 Wordpress 出现 403 错误
- javascript - 使用 Eris 编辑频道权限
- machine-learning - CNN 不兼容
- python - gnuplot“条件”:三列上的多重曲线(30?)