Как разрешить пользователю устанавливать имя пользователя при регистрации в Django social-auth? - PullRequest
2 голосов
/ 26 марта 2012

Я использую Django social-auth (версия omab, чтобы избежать путаницы с другим аналогичным проектом), и сейчас я пробую его с Facebook.Можно зарегистрировать нового пользователя и войти / выйти без каких-либо проблем.Единственное, что я хотел бы добавить - это форма во время регистрации, чтобы позволить пользователю ввести желаемое имя пользователя, которое будет использоваться на сайте, потому что в данный момент имя пользователя является либо именем пользователя Facebook (я не хочу заставлять пользователя использоватьто же имя пользователя) или UUID, если нет имени пользователя Facebook (и это ужасно).

Я читаю документы, конвейеры и все такое, но я не уверен, что понимаю, любой намек или объяснениебудет приветствоваться.

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

Я нашел его в примере приложения, которое поставляется с social-auth https://github.com/omab/django-social-auth/tree/master/example/app. Существует пример конвейера для использования и даже формы и представлений, которые вам нужно реализовать.Очень мало или вообще не требуется никаких изменений, чтобы иметь работающую реализацию.В то время, когда я пишу это, необходимо выполнить некоторую работу с формой, поскольку вы можете ввести уже введенное имя пользователя.

0 голосов
/ 31 мая 2018

Принятый ответ ссылается на весь проект GitHub без объяснения того, какие его части актуальны, а некоторые из них устарели, поэтому я постараюсь поделиться тем, что я узнал.

django-social-auth устарела и заменена на social-app-django , которая интегрирует Django с проектом python-social-auth .

Документация по python-social-auth Трубопроводы актуальна. В конвейере по умолчанию это этап, на котором генерируется имя пользователя:

# Make up a username for this person, appends a random string at the end if
# there's any collision.
'social_core.pipeline.user.get_username',

Реализация get_username показывает поведение по умолчанию. Нам придется скопировать эти аспекты:

  • Он обеспечивает уникальность имени пользователя, проверяя storage.user.user_exists(username=...) и изменяя имя пользователя до тех пор, пока оно не станет уникальным.
  • Возвращает словарь {'username': '...'}, который передается на следующие этапы в конвейере.

Чтобы запросить у пользователя, нам нужен пользовательский «частичный» этап конвейера . Это позволяет нам приостановить конвейер, чтобы дождаться, когда пользователь отправит форму имени пользователя, а затем возобновить ее, как только мы получим имя пользователя.

...