У меня есть проект, который должен прочитать 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, что может серьезно повлиять на производительность.