django-loginza icon indicating copy to clipboard operation
django-loginza copied to clipboard

Генерация нового username

Open chibisov opened this issue 13 years ago • 3 comments

Сейчас новый 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 хэша случайной строки.

chibisov avatar Oct 02 '12 20:10 chibisov

Столкнулся с такой же проблемой. Правда в моем случае username не обрезается, а возникает ошибка при добавлении пользователя в db:

DatabaseError: value too long for type character varying(30)

username из хеша md5 нечитаемый, может лучше использовать username + randint() ?

vkorchagin avatar Dec 28 '13 20:12 vkorchagin

У меня в проде решение с md5 работает уже год. Решение с randint будет работать, но с больше долей вероятности возникновения коллизий.

chibisov avatar Dec 29 '13 14:12 chibisov

Вариант с randint() мне нравится гораздо больше. В текущем PR мне не нравится, что имя полностью формируется их хэша - вариант vgarvardt23567 мне нравится гораздо больше нежели qoiwuhq3847yoasic8oq34

vgarvardt avatar Jan 04 '14 23:01 vgarvardt