我已经根据django rest框架Docs实现了令牌认证.
从我读到的形式来看,DRF的令牌认证非常简单 - 每个用户一个令牌,令牌不会过期并且始终有效(我是对的吗?).
我知道有更好的做法,但是现在DRF令牌认证对我来说很好.
我的问题是 -使用普通DRF令牌身份验证注销的最佳做法是什么?
我的意思是,当用户注销时,我应该从客户端删除令牌吗?然后登录再次获取令牌?我应该删除令牌并生成一个新令牌吗?
有经验的人吗?
login token logout django-rest-framework http-token-authentication
我已经创建了一个认证类:
restapi/settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
# 'rest_framework.authentication.TokenAuthentication',
'restapi.authentication.ExpiringTokenAuthentication',
),
'PAGINATE_BY': 10
}
Run Code Online (Sandbox Code Playgroud)
restapi/authentication.py
import datetime
from rest_framework.authentication import TokenAuthentication
class ExpiringTokenAuthentication(TokenAuthentication):
def authenticate_credentials(self, key):
try:
token = self.model.objects.get(key=key)
except self.model.DoesNotExist:
raise exceptions.AuthenticationFailed('Invalid token')
if not token.user.is_active:
raise exceptions.AuthenticationFailed('User inactive or deleted')
# This is required for the time comparison
utc_now = datetime.utcnow()
utc_now = utc_now.replace(tzinfo=pytz.utc)
if token.created < utc_now - timedelta(hours=24):
raise exceptions.AuthenticationFailed('Token has expired')
return token.user, token
Run Code Online (Sandbox Code Playgroud)
restapi/tests.py
def test_get_missions(self):
"""
Tests that …
Run Code Online (Sandbox Code Playgroud) 据了解,obtain_auth_token
view可用作登录功能.您提供凭据并获取令牌.注销会是什么?我应该在退出时删除令牌吗?什么是最佳做法?
如果删除没问题,那么如何同时处理多个客户端.比如说,用户从移动设备注销但希望保持登录网络.该Token
模型目前具有OneToOne关系User
.
请给我一些建议.谢谢
我正在使用Django Rest Framework令牌认证机制.
http://www.django-rest-framework.org/api-guide/authentication#tokenauthentication
当创建created
te标记时,它创建带有字段的数据库表,其值等于时间戳.例如:2014-04-07 07:42:50.395626
有谁知道这个令牌有效多长时间?我在上述网站上找不到此信息.
我也想知道,即使用户更改密码,此令牌仍然有效.它不应该生成一个新的,或至少使旧的不再有效?
我目前有一个 Django 应用程序,它只是一堆 REST API(当然由数据库支持)。我正在使用Django REST framework JWT管理我的身份验证。它工作正常。每当用户登录时,我的 API 之一都会返回一个令牌,消费应用程序存储该令牌以供以后使用。到现在为止还挺好。
但是,将来,此解决方案需要扩展。而不是让单个服务器运行 Django 应用程序,我可以预见我需要多个 Web 服务器的情况。当然,所有这些网络服务器都将连接到同一个数据库。但是由于令牌未存储在数据库中,这将如何与多个 Web 服务器一起使用?一台服务器发出的令牌在另一台服务器上无效。
那么其他人是如何解决这个问题的呢??
django rest restful-authentication django-authentication django-rest-framework