Python Social Auth получить Google аватар
Есть ли способ получить URL-адрес профиля Google с помощью социальной авторизации Python?
Итак, это то, что я делаю для Facebook и Twitter, добавьте конвейер с этим кодом:
if strategy.backend.name == 'facebook':
url = 'http://graph.facebook.com/{0}/picture'.format(response['id'])
elif strategy.backend.name == "twitter":
if response['profile_image_url'] != '':
url = response['profile_image_url']
elif strategy.backend.name == "GoogleOAuth2": # doesn't work
user_id = response['id']
url = "???"
Во-первых, я не знаю, как называется серверная часть, это "GoogleOAuth2"? Во-вторых, какой URL я должен использовать, чтобы сохранить аватар профиля? Это путь?
4 ответа
from social.backends.google import GoogleOAuth2
def save_profile(backend, user, response, *args, **kwargs):
if isinstance(backend, GoogleOAuth2):
if response.get('image') and response['image'].get('url'):
url = response['image'].get('url')
ext = url.split('.')[-1]
user.avatar.save(
'{0}.{1}'.format('avatar', ext),
ContentFile(urllib2.urlopen(url).read()),
save=False
)
user.save()
Чтобы получить аватары от входа в социальную сеть, вам нужно создать файл pipe.py в своем приложении и добавить следующие строки в settings.py:
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.user.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
'apps.users.pipeline.get_avatar', # This is a path of your pipeline.py
#and get_avatar is the function.
)
и позже добавьте этот контент в ваш файл pipe.py
def get_avatar(backend, strategy, details, response,
user=None, *args, **kwargs):
url = None
if backend.name == 'facebook':
url = "http://graph.facebook.com/%s/picture?type=large"%response['id']
# if you need a square picture from fb, this line help you
url = "http://graph.facebook.com/%s/picture?width=150&height=150"%response['id']
if backend.name == 'twitter':
url = response.get('profile_image_url', '').replace('_normal','')
if backend.name == 'google-oauth2':
url = response['image'].get('url')
ext = url.split('.')[-1]
if url:
user.avatar = url
user.save()
Я не знаком с Python Social Auth, но похоже, что вы хотите GooglePlusAuth.
Чтобы получить URL-адрес изображения, вам нужно будет сделать HTTP-запрос к методу API people.get с помощью userId
установлен в me
и аутентифицирован как пользователь. Ответ включает в себя image.url
значение.
Я использую подход, предложенный vero4ka.
Откат в отладку Python (import pdb; pdb.set_trace()
) вокруг линии ext = url.split('.')[-1]
Я заметил, что разделенный вывод не полностью разделяет расширение файла, а именно:
(Pdb) url = response['image'].get('url').split('.')
(Pdb) url
[u'https://lh4', u'googleusercontent', u'com/redacted/redacted/photo', u'jpg?sz=50']
Мне нужно разделить на ?
символ тоже. Ничего страшного.
Не знаете, почему нужно разделить, а затем рекомбинировать расширение таким образом?