python-social-auth с django. Не удается получить электронную почту пользователя на VK.com
settings.py
имеет:
SOCIAL_AUTH_VK_OAUTH2_SCOPE = ['email']
Но это не работает. Одновременно я могу получить электронную почту из Facebook.
3 ответа
Решение
Я только что нашел, как это исправить:
https://github.com/omab/python-social-auth/pull/267
Это исправление будет добавлено в пип дистрибутив после 0.1.23
Django (1.9) and python-social-auth (0.2.13)
settings.py:
INSTALLED_APPS = [
...
'social.apps.django_app.default',
]
AUTHENTICATION_BACKENDS = (
'social.backends.vk.VKOAuth2',
'django.contrib.auth.backends.ModelBackend',
)
SOCIAL_AUTH_RAISE_EXCEPTIONS = True
RAISE_EXCEPTIONS = True
SOCIAL_AUTH_VK_OAUTH2_KEY = 'id_app'
SOCIAL_AUTH_VK_OAUTH2_SECRET = 'secret_key'
SOCIAL_AUTH_VK_OAUTH2_SCOPE = [
'notify',
'friends',
'email',
]
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'social.pipeline.user.get_username',
'social.pipeline.social_auth.associate_by_email', # <--- enable this one
'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
)
urls.py:
urlpatterns = [
...
url(r'', include('social.apps.django_app.urls', namespace='social')),
url(r'', include('django.contrib.auth.urls', namespace='auth')),
]
auth.html:
<a href="{% url 'social:begin' 'vk-oauth2' %}?next={% url 'dashboard' %}">VK</a>
vk->app->settings:
site address: http://127.0.0.1:8000
redirect uri: http://127.0.0.1:8000/complete/vk-oauth2/
Я думаю, вы не настраиваете, как сопоставить данные в области extra_data
диктовать на SocialAuth
объект:
SOCIAL_AUTH_VK_EXTRA_DATA = [ # configure how the data is labelled on SocialAuth.extra_data
# pattern is (source key, destination key)
('email', 'email'),
]
(Это может быть SOCIAL_AUTH_VK_OAUTH2_EXTRA_DATA
- Я думаю, здесь на основе других бэкэндов)
Также для Facebook:
SOCIAL_AUTH_FACEBOOK_SCOPE = [
'email', # we need to ask for this explicitly
]
SOCIAL_AUTH_FACEBOOK_EXTRA_DATA = [
# pattern is (source key, destination key)
('email', 'email'),
]
http://python-social-auth.readthedocs.org/en/latest/backends/facebook.html