django:自定义令牌认证

时间:2016-07-27 15:08:22

标签: python django django-rest-framework

我在做API,并尝试使用令牌。我想实现: 1,客户端在头部向令牌服务器发出请求; 2,服务器验证令牌并做某事(一次)。

查看DRF,如果我想覆盖authenticate函数,我还需要返回User对象或我们自己的自定义User对象。我不想返回任何User对象,因为整个过程不涉及任何用户,只是令牌和许可做某事。怎么做?

由于

1 个答案:

答案 0 :(得分:2)

首先在models.py中创建模型令牌,您还需要创建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'}