2015-04-03 2 views
4

В API, построенном с использованием Django REST Framework, аутентификация может быть выполнена с использованием метода TokenAuthentication. Его documentation говорит, что токен аутентификации должен быть отправлен через заголовок Authorization.Токен в строке запроса с использованием TokenAuthentication в Django REST Framework

Часто можно отправлять API-ключи или жетоны через строку запроса для аутентификации, например https://domain.com/v1/resource?api-key=lala.

Есть ли способ сделать то же самое с TokenAuthentication в Django REST Framework?

ответ

8

От Deafult 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) 
6
class QueryStringBasedTokenAuthentication(TokenAuthentication): 
    def authenticate(self, request): 
     key = request.query_params.get('auth_token').strip() 
     if key: 
      return self.authenticate_credentials(key) 
     return False 

DRF имеет TokenAuthentication, которая ищет token в header. Метод authenticate_credentials тщательно проверяет токен.

Смежные вопросы