2016-03-03 2 views
0

Я использую Django REST Framework в своем приложении. Мне нужна аутентификация, но не по умолчанию. У меня есть модель:Django custom authentication

class Worker(models.Model): 
    token = models.CharField(...) 
    ip = models.GenericIPAddressField(...) 
    created_date = models.DateTimeField(...) 
    last_update = models.DateTimeField(...) 

работник отправляет сообщения через мой API для просмотра WorkerView, который наследуется от APIView Джанго Rest Рамочной основы. Токен отправить в заголовке запроса в:

class WorkerView(APIView): 
    def post(self, request): 
     # some not important code 

У меня есть метод, проверяющий:

def authenticate(request): 
    try: 
     ip = request.META.get("REMOTE_ADDR", None) 
     token = request.META.get("HTTP_AUTHORIZATION", None) 
    ... 

Я думал о два решения:

  1. сделать класс подмешать и унаследовать его в моем WorkerView :

    class WorkerView(AuthenticationMixin, APIView) 
        ... 
    
  2. сделать класс декоратора из моего метода аутентификации и использовать его как это:

    @authenticate 
    class WorkerView(APIView) 
    

Но в обоих случаях мне нужно передать запрос аргумент для аутентификации метод. Как это сделать? Или, может быть, есть лучшее решение моей проблемы?

ответ

0

Почему бы вам не создать собственный класс проверки подлинности, как определено здесь? http://www.django-rest-framework.org/api-guide/authentication/#custom-authentication

+0

Потому что мне нужно разделить пользователей между теми, которые регистрируются с логином/паролем и те, которые используют токен. И я не хочу использовать mofidy/extend User model. Вместо этого я хочу разрешить объекты модели, а не объекты User. Я знаю, и я использовал обычную проверку подлинности. Если я хочу использовать его, я бы не спросил. – hebius

+0

Я не вижу здесь проблемы. Вы можете использовать столько классов проверки подлинности сразу, сколько захотите, а создание собственного класса проверки подлинности - хороший способ выполнить вашу задачу. –