Как скопировать пароль на дополнительные поля в пользовательской таблице с помощью django rest framework - PullRequest
0 голосов
/ 17 марта 2020

У меня есть проект, который должен прочитать password для других операций подключения.

Так что мне нужно иметь возможность прочитать пароль plaintext из базы данных. Но пароль в базе данных зашифрован с помощью md5 и не может быть расшифрован.

Поэтому я хочу сохранить копию пароля при регистрации в качестве пользователя / супер-администратора, не в виде обычного текста, а в зашифрованном виде с помощью алгоритма шифрования и дешифрования, чтобы я мог расшифровать его и получить пароль, когда Мне нужно это

UserModel выглядит следующим образом:

class User(AbstractUser):
    jwt_secret = models.UUIDField(default=uuid.uuid4)
    test= models.CharField(max_length=200, null=False)


    def __str__(self):
        return self.username

метод один

изменить функцию создания UserSerializer

class UserSerializer(serializers.ModelSerializer):

    def create(self,validated_data):
        user = User.objects.create(
        username=validated_data['username'],
        test=encry(validated_data['password'])
        )
        user.set_password(validated_data['password'])
        user.save()
        return user

Это действительно можно сделать, когда registering a user, когда используется http://hostname:port/docs/swagger/ тестовая регистрация.

Но при использовании команды python3 manage.py createsuperuser поле test не может быть вставлено, что отображается как empty.

Метод два

Поэтому я попытался использовать Manager

См. Следующее Настройка аутентификации в Django¶

MyUserManager выглядит следующим образом:

class MyUserManager(UserManager):

    def create_user(self, username, email=None, password=None, **extra_fields):
        extra_fields.setdefault('test', encry(password))
        return self._create_user(username, email, password, **extra_fields)

    def create_superuser(self, username, email, password, **extra_fields):
        extra_fields.setdefault('test', encry(password))
        return self._create_user(username, email, password, **extra_fields)

UserModel выглядит следующим образом:

class User(AbstractUser):
    jwt_secret = models.UUIDField(default=uuid.uuid4)
    test= models.CharField(max_length=200, null=False)

    objects = MyUserManager()

    def __str__(self):
        return self.username

В регистр команд я не писал admin.py, python3 manage.py createsuperuser администратор может добавить тестовое поле, но посетите http://hostname:port/docs/swagger/ show 403 Forbidden, поэтому необходимость добавить admin.py часть.

Но я не знаю, как написать необходимые UserCreationForm, UserChangeForm и MyUserAdmin, справа

Требование

При регистрации any user система может сохранить пароль в другом поле в пользовательской таблице.

Мне очень жаль, я знаю, что это требование может быть completely unreasonable, но это потому, что проект на самом деле требует этого.

Итак, я был бы признателен, если бы вы могли сказать мне, как реализовать это или есть более простой способ o выполнить мои требования

Примечание. Невозможно изменить пароль на plain, поскольку он связан с другими компонентами. И я не хочу делать это с паролем от violent way до crack md5, что может серьезно повлиять на производительность.

...