2016-12-23 8 views
0

Я не очень понимаю, почему я не могу войти в систему как пользователь, созданный с помощью Django REST Framework. Я использую модель пользователя from django.contrib.auth.models import User.Django REST Framework Login

Я разворачиваю сервер локально и могу войти в систему с помощью суперпользователя, который я создал, и получить доступ к данным, которые я хочу, но я создал API, чтобы я мог создавать пользователей через API-интерфейс, доступный для просмотра. для входа в систему с одним из этих пользователей. Однако я не могу.

Любые предложения? Для приведенного ниже изображения я не смог бы войти в систему, используя «test» имя пользователя и пароль «test123».

Это ошибка при входе в систему. Введите правильное имя пользователя и пароль. Учтите что оба поля могут быть чувствительны к регистру.

enter image description here

Serializer

class UserSerializer(serializers.HyperlinkedModelSerializer): 
    ideas = serializers.HyperlinkedRelatedField(many=True, view_name='idea-detail', read_only=True, allow_null=True) 
    ideacomments = serializers.HyperlinkedRelatedField(many=True, view_name='ideacomment-detail', read_only=True, 
                 allow_null=True) 

    class Meta: 
     model = User 
     fields = ('url', 'id', 'username', 'password', 'email', 
        'first_name', 'last_name', 
        'date_joined', 'ideas', 'ideacomments') 

VIEW

class UserViewSet(MultipleFieldLookupMixin, viewsets.ModelViewSet): 
    """ 
    This viewset automatically provides `list` and `detail` actions. 
    """ 
    queryset = User.objects.all() 
+0

Есть ошибки, которые ему выдаются? –

+0

Введите правильное имя пользователя и пароль. Учтите что оба поля могут быть чувствительны к регистру. –

+0

Вы используете пользовательскую модель «Пользователь»? –

ответ

1

На рисунке вы вывесили показывает список пользователей, не так ли? Мне интересно, почему пароль отображается в ясном виде. Обычно Django не хранит пароли, а хеши. Так, может быть, это проблема? Вы использовали функцию set_password модели User при создании пользователя?

+0

Я этого не сделал, но я все еще мог создавать эти записи. Один пользователь, созданный с помощью команды «python create superuser», действительно имеет большой хешированный пароль. Они были созданы с использованием веб-GUI и веб-запроса до 127.0.0.1/users/ с json для пользователя. –

+0

The Rest Framework не «переводит» пароли на требуемые хэши. Вы должны сделать это сами. Напишите свой собственный обработчик POST и используйте set_password модели USER (так же, как объяснил Md. Al-Amin). Возможно, это может оказаться полезным: http://www.django-rest-framework.org/tutorial/3-class-bas-views/ – crystalAhmet

+0

Даже если я переведу пароли и сохраню их как хэши, зачем Работа? Они хранятся как обычный текст. –

0

Убедитесь, что вы правильно сохраняете пароль. Django хранит пароль как хэш не в формате обычного текста.

Пример: создание нового пользователя.

user = User.objects.create(username='testuser') 
user.set_password('testpass') 
user.save() 
+0

Я не делаю этого, я думаю, это может быть обработано Django Rest Framework. Я опубликовал View/Serializer, который я использую. Все пользователи, которые я создал через веб-интерфейс пользователя, или через Postman, используя URL 127.0.0.01/users/ –