Поэтому я дам полное раскрытие информации с самого начала, что я совершенно новичок как в Django, так и в Django-allauth.django-allauth Not Saving Социальная информация
Теперь, когда это не работает, проблема, с которой я столкнулась, заключается в том, что когда пользователь входит в систему через социальный сайт (я пытался Google и Facebook), ни одна из данных, полученных с сайта, не является вставляемые в поля данных пользователя. После аутентификации пользователю по-прежнему предлагается ввести электронное письмо, и все поля имени остаются пустыми. Я попытался исправить это вручную, создав пользовательский адаптер, но это тоже не сработало. Из использования операторов печати я вижу, что данные извлекаются с сайта просто отлично - он просто не сохраняется в атрибутах пользователя.
Исправьте меня, если я ошибаюсь, но, прочитав документацию и часть источника django-allauth, у меня создается впечатление, что социальная авторизация автоматически сохраняет электронную почту пользователя и имена и фамилии через крюк populate_user(self, request, sociallogin, data):
в классе DefaultSocialAccountAdapter
, поэтому мне действительно не нужно иметь дело с обходными решениями. Таким образом, я предполагаю, что я просто делаю что-то глупое, что испортило мне это ... Хотя, если есть умное обходное решение, которое исправит эту проблему, я буду в порядке с этим, из-за отсутствия лучшего решение.
Примечание: Использование Django 1.7 и Python 3.4.1
EDIT: Django-allauth является успех в создании нового пользователя и связать пользователя социальной счет, который содержит все данные, извлекаемых из социальный сайт, но ни одна из этих данных не заполняет поля в объекте User, такие как email, first_name и last_name.
Вот мои настройки конфигурации Джанго-allauth в settings.py:
ACCOUNT_AUTHENTICATION_METHOD = "email"
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "required"
ACCOUNT_USERNAME_REQUIRED = False
SOCIALACCOUNT_AUTO_SIGNUP = True
# The following line was uncommented when I was trying to use my own adapter
# SOCIALACCOUNT_ADAPTER = 'profiles.profile_adapter.ProfileAdapter'
SOCIALACCOUNT_PROVIDERS = {
'facebook':
{ 'SCOPE': ['email'],
'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
'METHOD': 'oauth2',
'LOCALE_FUNC': lambda request: 'en_US'},
'google':
{ 'SCOPE': ['https://www.googleapis.com/auth/userinfo.profile'],
'AUTH_PARAMS': { 'access_type': 'online' } },
}
А вот код, который я имел в моем пользовательский адаптер (который, используя операторы печати, я мог бы сказать привыкал и обработки правильных данных), где я пытался сохранить вручную поля в объект пользователя
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
class ProfileAdapter(DefaultSocialAccountAdapter):
def pre_social_login(self, request, sociallogin):
'''
Check for extra user data and save the desired fields.
'''
data = sociallogin.account.extra_data
user = sociallogin.account.user
print("LOGS: Caught the signal -> Printing extra data of the account: \n" + str(data))
if 'first_name' in data:
user.first_name = data['first_name']
elif 'given_name' in data:
user.first_name = data['given_name']
if 'last_name' in data:
user.last_name = data['last_name']
elif 'family_name' in data:
user.last_name = data['family_name']
user.save()
Примечание Приведенный выше код создает пользователя в базе данных, которая не связана с какой-либо социальной счет, но содержит гр исправить имя и фамилию. Затем пользователь перенаправляется на форму, в которой говорится, что они регистрируются в социальной учетной записи и запрашивается адрес электронной почты. После отправки этой формы пользователь, созданный пользователем, перезаписывается новым пользователем, который равен, связанный с социальной учетной записью, содержит электронное письмо, введенное в форму, но не содержит заполненных полей или фамилий.
Вы получили социальную часть? Если это так, проверьте таблицу пользователя django auth, у нее должен быть пользователь, созданный django-allauth. Вам не нужно писать для этого адаптер профиля. –
Да, django-allauth создает пользователей, и я вижу, что социальный токен связан с пользователем, но ни одно из полей (I.e. first_name, last_name, email) пользователя не заполнено. – rfj001