vgarvardt / django-loginza

Django application for Loginza service
http://loginza.ru
38 stars 17 forks source link

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

Open chibisov opened 11 years ago

chibisov commented 11 years ago

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

vkorchagin commented 10 years ago

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

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

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

chibisov commented 10 years ago

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

vgarvardt commented 10 years ago

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