实施"记住我"Django

Tim*_*Tim 2 python authentication django jwt django-rest-framework

我目前正在尝试在Django中实现"记住我"功能.

我正在使用SessionAuthenticationDjango REST框架和JSONWebTokenAuthenticationdjangorestframework-jwt.

但是,我不知道如何为这两种身份验证实现"记住我"的概念.就像我如何永久地扩展会话以及如何永久扩展令牌(我正在使用JWT auth用于移动和桌面 - 用于浏览器的Session auth).

此外,为这两种身份验证实现此功能的安全方法是什么?

Kev*_*own 6

这里有一些我应该提前明确的事情:身份验证如何工作以及到期时间SessionAuthenticationJSONWebTokenAuthentication.

会话认证

SessionAuthenticationDjango REST框架提供的类实际上只是Django提供会话框架的一小部分.因此,如果您可以使用他们的会话在Django中实现"记住我"功能,DRF也将继承它.

幸运的是,有人已经在Stack Overflow上问过这个问题:Django"记住我",内置登录视图和身份验证表单

基本上它归结为改变SESSION_COOKIE_AGE设置(2周默认情况下),以一个非常高的数字.另外,请务必记住长期会话的含义,并且可能会在您访问的网站(通常为2周到6个月)内查看会话cookie的默认时间.

JSON Web令牌

django-rest-framework-jwtJSONWebToken提供的身份验证类基于JSON Web令牌对请求进行身份验证.默认情况下,令牌将在五分钟后过期,但最多可刷新七天.

令牌到期时间由JWT_EXPIRATION_DELTA设置控制.建议不要将此时间扩展得太大,而是使用刷新令牌来生成长期令牌.您可以使用JWT_ALLOW_REFRESH设置启用刷新令牌,并使用设置控制到期时间JWT_REFRESH_EXPIRATION_DELTA.