2015-07-03 4 views
2

Я работаю над приложением, в котором пользователи могут войти в мое приложение, используя свои учетные данные учетной записи Twitter, которые я реализовал с помощью python-social-auth. Теперь система аутентификации Django предоставляет User объекты, с пятью главными атрибутами username, password, email, first_name и last_name, как указано в документации: https://docs.djangoproject.com/en/1.7/topics/auth/default/#user-objectsDjango: атрибут 'email' объекта пользователя

Теперь, после того, как пользователь успешно входит в использовании его/ее счет Twitter, я хотите, чтобы определенные поля моей формы, такие как полное имя пользователя, адрес электронной почты, имя пользователя учетной записи Twitter и т. д., были предварительно заполнены. Для этой цели я использовал что-то подобное для полной формы имени поля предварительного заполнения пользователя:

{% if user and not user.is_anonymous %} 

    Full Name: <input type = "text" name = "name" value = "{{user.get_full_name}}""> 

{% endif %} 

Это то, что выше поле формы выглядит как после того, как пользователь успешно входит через его/ее твиттер:

enter image description here

Отлично! Работает так, как предполагалось. Аналогично, такие атрибуты, как username, last_name, first_name, работают только для текущего зарегистрированного объекта User.

Однако, когда я пытаюсь предварительно заполнить поле адреса электронной почты в моей форме, используя:

Email Address: <input type = "text" name = "email" value = "{{user.email}}""> 

Однако значение {{user.email}} не возвращает ничего, и мое поле формы выглядит примерно так:

enter image description here

Почему атрибут User объекта не возвращающей адрес электронной почты, с помощью которой пользователь регистрируется при помощи своих учетных данных Twitter email? Все остальные атрибуты User, похоже, работают отлично. Какие-нибудь рассуждения позади этого?

EDIT 1:

Это то, что моя база данных в админке выглядит следующим образом:

enter image description here

Так email поле не пусто, поэтому User объект возвращает ничего для этого значения атрибута. Но почему адрес электронной почты не хранится в базе данных каждый раз, когда новый пользователь регистрируется в своих учетных записях Twitter?

+0

Вы уверены, что вы получите адрес электронной почты от пользователя? Сначала я проверил бы, что у вас в db. –

+0

, вероятно, вы получаете сигнал аутентификации от используемого вами бэкэнда, но он не может автоматически сохранить в базе данных некоторые способы, чтобы вы могли аутентифицироваться с помощью электронной почты пользователей, но на самом деле вы не можете его сохранить? –

+0

@PatrickBeeson Я отредактировал свое оригинальное сообщение. Проблема заключается именно в том, что вы ожидали. Любые решения? –

ответ

0

В admin, если user_email не отображается, вероятно, нет электронной почты, добавленной с пользовательским интерфейсом.

Просто убедитесь, что это снова проверив базу данных.

+0

Я отредактировал свое оригинальное сообщение. Поле адреса электронной почты в базе данных пустое, как вы ожидали. Какие-нибудь рассуждения позади этого? –

1

Электронная почта хранится в другом месте при использовании python-social-auth. Они создают SocialUser таблицу и, вероятно, данные, которые вы искать хранятся в формате JSON в extra_data поле - посмотреть на model созданного PSA

Тяговых дополнительные данные могут быть не столь тривиален, как и раньше, но вы можете добавить функциональность, будет сохранен адрес электронной почты в таблице пользователя, когда будет создан социальный пользователь.См Pipeline

+0

Поле «extra_data» не содержит данные адреса электронной почты. –

+0

@ManasChaturvedi Точка моего ответа состояла в том, чтобы сказать вам, что вам нужно исследовать, как и где вы собираете свои данные. Возвращается ли электронное письмо во время входа в twitter? вы проверили, что возвращает вызов API? если никакое электронное письмо не будет возвращено, то никакое письмо не будет существовать. Посмотрите на вызов API, а затем посмотрите на Pipeline, чтобы решить, что будет храниться «extra_data». Все это настраивается. – Incognos

0

Это, вероятно, происходит потому, что у вас нет ничего в вашем процессе регистра, который фактически хранит электронную почту в базе данных для формы, так что на ваш взгляд что-то вроде

p = #user object from form. 
p.email = request.POST['email'] 
p.save() 
+0

Это не работает. Атрибут «email» по-прежнему не сохраняет значения. –

Смежные вопросы