在使用Django REST Framework构建的API中,可以使用TokenAuthentication方法来完成身份验证。它的documentation表示应通过Authorization header 发送身份验证 token 。

通常,人们可以通过查询字符串发送API key 或 token 以进行身份​​验证,例如https://domain.com/v1/resource?api-key=lala

有没有办法对Django REST Framework的TokenAuthentication进行同样的处理?

最佳答案

通过默认,DRF不支持查询字符串进行身份验证,但是您可以轻松地在authenticate类中重写其TokenAuthentication方法来支持它。

一个例子是:

class TokenAuthSupportQueryString(TokenAuthentication):
    """
    Extend the TokenAuthentication class to support querystring authentication
    in the form of "http://www.example.com/?auth_token=<token_key>"
    """
    def authenticate(self, request):
        # Check if 'token_auth' is in the request query params.
        # Give precedence to 'Authorization' header.
        if 'auth_token' in request.QUERY_PARAMS and \
                        'HTTP_AUTHORIZATION' not in request.META:
            return self.authenticate_credentials(request.QUERY_PARAMS.get('auth_token'))
        else:
            return super(TokenAuthSupportQueryString, self).authenticate(request)

关于python - 使用Django REST Framework的TokenAuthentication在查询字符串中的 token ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29433416/

10-11 07:57