django-loginza
django-loginza copied to clipboard
Генерация нового username
Сейчас новый username формируется так:
while True:
try:
existing_user = User.objects.get(username=username)
username = '%s%d' % (username, existing_user.id)
except User.DoesNotExist:
break
При таком итерировании возможен вариант, когда username превысит 30 символов и возбудится исключение DoesNotExist. При создании пользователя будет использоваться 30-ти символьный обрезанный username, который на самом деле существует в базе. Столкнулся именно с такой ситуацией. Не знаю, почему вы выбрали именно такой вариант формирования username, возможно на этом завязана какая-то логика? Предлагаю формировать username из md5 хэша случайной строки.
Столкнулся с такой же проблемой. Правда в моем случае username не обрезается, а возникает ошибка при добавлении пользователя в db:
DatabaseError: value too long for type character varying(30)
username из хеша md5 нечитаемый, может лучше использовать username + randint() ?
У меня в проде решение с md5 работает уже год. Решение с randint будет работать, но с больше долей вероятности возникновения коллизий.
Вариант с randint() мне нравится гораздо больше. В текущем PR мне не нравится, что имя полностью формируется их хэша - вариант vgarvardt23567 мне нравится гораздо больше нежели qoiwuhq3847yoasic8oq34