【发布时间】:2016-07-27 15:08:22
【问题描述】:
我正在做 API,并尝试使用令牌。我想实现: 1、客户端向服务器发出请求,请求头带有token; 2、服务器验证令牌并做某事(一次)。
查看DRF,如果我想覆盖认证功能,我还需要返回用户对象或我们自己定制的用户对象。我不想返回任何用户对象,因为整个过程不涉及任何用户,只是令牌和做某事的权限。如何做到这一点?
谢谢
【问题讨论】:
标签: python django django-rest-framework
我正在做 API,并尝试使用令牌。我想实现: 1、客户端向服务器发出请求,请求头带有token; 2、服务器验证令牌并做某事(一次)。
查看DRF,如果我想覆盖认证功能,我还需要返回用户对象或我们自己定制的用户对象。我不想返回任何用户对象,因为整个过程不涉及任何用户,只是令牌和做某事的权限。如何做到这一点?
谢谢
【问题讨论】:
标签: python django django-rest-framework
首先,在models.py中创建modelToken。此外,您需要创建一个 token_required 装饰器。每当用户登录时,就会创建一个令牌,而每当她/他退出时,就会销毁该令牌。
登录:
def login(request):
username=request.payload.get('username')
password=request.payload.get('password')
user,err=Auth.authenticate(username,password)
if err:
raise Exception()
token=Token.generate()
#you can return user
return {'token':token}
装饰器:
def token_required(func):
def inner(request, *args, **kwargs):
try:
request.token=Token.objects.get(token=token)
return func(request, *args, **kwargs)
except Token.DoesNotExists:
pass
return inner
退出:
@token_required
def logout(request):
if request.method=='POST':
request.token.delete()
return {'status':'ok'}
【讨论】: