2016-03-12 6 views
0

Я выполнил все инструкции, указанные в Django REST framework JWT. Но когда я использую свою пользовательскую модель для входа, она не работает.Django rest framework JWT, не возвращающий токен

settings.py

... 

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.IsAuthenticated', 
    ), 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework.authentication.SessionAuthentication', 
     'rest_framework.authentication.BasicAuthentication', 
     'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 
    ), 
} 

Пользовательские менеджер пользователей:

class UserManager(BaseUserManager): 
    def create_user(self, email, password=None, **kwargs): 
     if not email: 
      raise ValueError('Users must have a valid email address.') 

     user = self.model(
      email=self.normalize_email(email), full_name=kwargs.get('full_name') 
     ) 

     user.set_password(password) 
     user.save() 

     return user 

    def create_superuser(self, email, password, **kwargs): 
     user = self.create_user(email, password, **kwargs) 
     user.is_admin = True 
     user.save() 

     return user 

Вот мой views.py, который я использую для входа в систему:

class LoginView(views.APIView): 
    def post(self, request, format=None): 
     data = json.loads(request.body) 

     email = data.get('email', None) 
     password = data.get('password', None) 

     account = authenticate(email=email, password=password) 

     if account is not None: 
      if account.is_active: 
       login(request, account) 
       serialized = UserSerializer(account) 
       return Response(serialized.data) 
      else: 
       return Response({ 
        'status': 'Unauthorized', 
        'message': 'This account has been disabled.' 
       }, status=status.HTTP_401_UNAUTHORIZED) 
     else: 
      return Response({ 
       'status': 'Unauthorized', 
       'message': 'Username/password combination invalid.' 
      }, status=status.HTTP_401_UNAUTHORIZED) 
+0

Какая ошибка отображается вам? Что не работает? – jape

+0

Нет ошибки. Все работает так, как будто он не настроен. –

+0

Вы проверили установленные приложения? –

ответ

0

Проверить установленные приложения:

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'django_extensions', 
    'rest_framework', 
) 
+0

Да, у него есть запись 'rest_framework'. Кроме того, мои потоки DRF работают. Его только сетевые жетоны не возвращаются. –

0

Вся точка аутентификации JWT (JSON Web Token) - это token, которая генерируется с использованием определенного алгоритма.

Для вашего LoginView работать должным образом, вам необходимо:

  1. аутентификации пользователя
  2. генерировать маркер JWT с помощью метода rest_framework_jwt.utils.jwt_encode_handler
  3. добавить сгенерированный маркер полезной нагрузки ответа

Вы можете проверить исходный код модуля DRF-JWT, чтобы узнать, как это делается, но если вы не хотите существенно изменить ответ payl oad (включив, например, сериализованное представление модели, не связанной с моделью пользователя), я бы рекомендовал использовать неявную аутентификацию и корректировку поведения с существующим API модуля.

+0

Изменения, указанные вами. Я пытаюсь войти в свой пользовательский режим входа в систему, но получаю сообщение об ошибке {«detail»: «Учетные данные аутентификации не были предоставлены».} Несмотря на то, что API входа по умолчанию работает нормально. –

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