【问题标题】:django: customized token authenticationdjango:自定义令牌认证
【发布时间】:2016-07-27 15:08:22
【问题描述】:

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

查看DRF,如果我想覆盖认证功能,我还需要返回用户对象或我们自己定制的用户对象。我不想返回任何用户对象,因为整个过程不涉及任何用户,只是令牌和做某事的权限。如何做到这一点?

谢谢

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    首先,在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'}
    

    【讨论】:

    • 这是一个很好的解决方案。但是必须进行一些调整才能使其正常工作