我目前正试图在Django中实现“记住我”功能。
我同时使用Django REST framework的SessionAuthentication
和djangorestframework jwt的JSONWebTokenAuthentication
。
但是,我不知道如何为这两个身份验证实现“记住我”的概念。比如我如何永远扩展会话,如何永远扩展令牌(我使用JWT auth for mobile&;desktop-session auth for browser)。
另外,对于这两种身份验证,实现此功能的安全方法是什么?
在设置文件时,必须设置:
在模板中:
提供一个名为“记住我”值为“1”的复选框
在login函数(view.py或ajax.py)中,当用户名和密码匹配时编写此代码
依赖关系
当我们进入登录页面时,此代码将从会话中撤消用户名和密码
以下代码用于用户身份验证。这里是HTML文件中的“is_remember_check”复选框字段
登录页面中的AJAX调用
HTML代码
这里有几件事我应该提前说明:身份验证是如何工作的,过期在哪里起作用。
会话身份验证
Django REST框架提供的
SessionAuthentication
类实际上只是session framework provided by Django上的一个小层。因此,如果您可以在Django中使用它们的会话实现一个“记住我”函数,DRF也将继承它。幸运的是,已经有人在堆栈溢出时询问了这个问题:Django “Remember Me” with built-in login view and authentication form
基本上可以归结为将the ^{} setting (默认为2周)更改为一个非常高的数字。另外,请务必记住长时间会话的含义,也许可以在您访问的网站(通常是2周到6个月)上查看默认会话cookie的时间。
JSON Web令牌
由django-rest-framework-jwt提供的
JSONWebToken
身份验证类基于JSON Web令牌对请求进行身份验证。默认情况下,令牌在5分钟后过期,但最多可以刷新7天。令牌过期时间由
JWT_EXPIRATION_DELTA
设置控制。建议不要将此时间延长到太大,而应该将use refresh tokens用于长寿命令牌。您可以使用JWT_ALLOW_REFRESH
设置启用刷新令牌,并使用JWT_REFRESH_EXPIRATION_DELTA
设置控制过期时间。相关问题 更多 >
编程相关推荐