Django Rest Framework не регистрируется после регистрации

У меня есть сайт на Django, и у меня есть пользовательская модель. На сайте, где я использую Django Forms, я могу зарегистрироваться и после входа в систему, и он работает хорошо. Затем я начал использовать DRF и Django-rest-auth. Я пишу собственный сериализатор регистра, после того, как я написал путь к нему в настройках.

from rest_framework import serializers
from ideas.models import Post, Unit, StatusOfPost
from accounts.models import User
from django.contrib.auth import authenticate
from django.contrib.auth import get_user_model
from allauth.account import app_settings as allauth_settings
from allauth.utils import email_address_exists
from allauth.account.adapter import get_adapter
from allauth.account.utils import setup_user_email

class RegisterSerializer(serializers.Serializer):
    phone_number = serializers.CharField(required=True, write_only=True)
    username = serializers.CharField(required=True, write_only=True)
    email = serializers.CharField(required=True, write_only=True)
    first_name = serializers.CharField(required=True, write_only=True)
    last_name = serializers.CharField(required=True, write_only=True)
    password1 = serializers.CharField(required=True, write_only=True)
    password2 = serializers.CharField(required=True, write_only=True)

    def get_cleaned_data(self):
        return {
            'first_name': self.validated_data.get('first_name', ''),
            'last_name': self.validated_data.get('last_name', ''),
            'address': self.validated_data.get('address', ''),
            'username': self.validated_data.get('username', ''),
            'password': self.validated_data.get('password', ''),
            'email': self.validated_data.get('email', ''),
            'phone_number': self.validated_data.get('phone_number',''),
        }

    def validate_email(self, email):
        email = get_adapter().clean_email(email)
        if allauth_settings.UNIQUE_EMAIL:
            if email and email_address_exists(email):
                raise serializers.ValidationError(
                    ("A user is already registered with this e-mail address."))
        return email

    def validate_username(self, username):
        username = get_adapter().clean_username(username)
        return username

    def validate_password1(self, password):
        return get_adapter().clean_password(password)

    def validate(self, data):
        if data['password1'] != data['password2']:
            raise serializers.ValidationError(
            ("The two password fields didn't match."))
        return data

    def save(self, request):
        adapter = get_adapter()
        user = adapter.new_user(request)
        self.cleaned_data = self.get_cleaned_data()
        adapter.save_user(request, user, self)
        setup_user_email(request, user, [])
        user.phone_number = self.cleaned_data.get('phone_number')
        user.save()
        return user

, и он тоже работает и создает нового пользователя, и он возвращает мне токен. В моем админе есть новый пользователь. Но если я хочу войти на мой сайт, как этот новый пользователь, сайт пишет мне, что имя пользователя или пароль недействительны. И я не понимаю, почему, что в моем admin я вижу этого пользователя, и я знаю, что пишу правильный пароль (я пытался создать разных пользователей, но результат один)

Я заметил, что в моем admin пароль нового пользователя не закодирован, как при регистрации на сайте.

для сравнения:

закодированный пароль после регистрации по API

!Z2Aw4VpN34JidaSNmODVi5MJKRJHTgx0gfROnylA

закодированный пароль после регистрации по API

pbkdf2_sha256$100000$aILnGtv6ClxI$KVg1lwjSKf0REZI/M85i2tN/mTUTLxngNVwo4YaCe08=

Может быть, это проблема, если да, то как это исправить? Я не знаю.

Спасибо всем

0
задан 13 August 2018 в 16:08

1 ответ

В функции get_cleaned_data удалите

'password': self.validated_data.get('password', ''),

и вставьте

'password1': self.validated_data.get('password1', ''),
'password2': self.validated_data.get('password2', ''),

Он решил мою задачу

0
ответ дан 15 August 2018 в 17:00

Другие вопросы по тегам:

Похожие вопросы: