如何使用 social-auth-app-django 获取 gmail 社交头像
How to get gmail social avatar using social-auth-app-django
我用谷歌搜索并找到了一些有用的 link 获取 gmail 头像。我使用了 social-auth-app-django 库并遵循
link 设置功能。身份验证工作正常但卡在项目主配置根目录中创建 avatar.I pipeline.py 并在我的视图中调用它,如 from TestDjangoAuth.pipeline 导入 get_avatar。
这是我检索头像的正确方法吗?另一个问题是如何使用我们调用的user_details、get_username中的管道方法views.py在 SOCIAL_AUTH_PIPELINE
这是 views.py 中的重定向方法,它给出了一些错误。我想将头像设置为会话:
from TestDjangoAuth.pipeline import get_avatar
def social_login(request):
if request.method == 'GET':
if request.user.is_authenticated:
request.session['photo'] = get_avatar()
这个pipeline.py我修改后在我看来使用
def get_avatar(backend, strategy, details, response, user=None, *args, **kwargs):
url = None
if backend.name == 'google-oauth2':
url = response['image'].get('url')
print(url)
return url
当我 return url 在我看来使用个人资料图片时会出现以下错误
AttributeError at /auth/complete/google-oauth2/
'str' object has no attribute 'backend'
通过谷歌搜索和应用一些修改,我终于使用下面的代码片段解决了我的问题。
def get_avatar(request, 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 backend.name == 'twitter':
# url = response.get('profile_image_url', '').replace('_normal','')
if backend.name == 'google-oauth2':
try:
url = response["picture"]
except KeyError:
url = response['image'].get('url')
get_file = download(url)
file_name = url.split('/')[-1]
extension = 'jpeg'
f = BytesIO(get_file)
out = BytesIO()
image = Image.open(f)
image.save(out, extension)
def download(url):
try:
r = requests.get(url)
if not r.status_code == 200:
raise Exception('file request failed with status code: ' + str(r.status_code))
return (r.content)
except Exception as ex:
return ('error')
我用谷歌搜索并找到了一些有用的 link 获取 gmail 头像。我使用了 social-auth-app-django 库并遵循 link 设置功能。身份验证工作正常但卡在项目主配置根目录中创建 avatar.I pipeline.py 并在我的视图中调用它,如 from TestDjangoAuth.pipeline 导入 get_avatar。 这是我检索头像的正确方法吗?另一个问题是如何使用我们调用的user_details、get_username中的管道方法views.py在 SOCIAL_AUTH_PIPELINE
这是 views.py 中的重定向方法,它给出了一些错误。我想将头像设置为会话:
from TestDjangoAuth.pipeline import get_avatar
def social_login(request):
if request.method == 'GET':
if request.user.is_authenticated:
request.session['photo'] = get_avatar()
这个pipeline.py我修改后在我看来使用
def get_avatar(backend, strategy, details, response, user=None, *args, **kwargs):
url = None
if backend.name == 'google-oauth2':
url = response['image'].get('url')
print(url)
return url
当我 return url 在我看来使用个人资料图片时会出现以下错误
AttributeError at /auth/complete/google-oauth2/
'str' object has no attribute 'backend'
通过谷歌搜索和应用一些修改,我终于使用下面的代码片段解决了我的问题。
def get_avatar(request, 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 backend.name == 'twitter':
# url = response.get('profile_image_url', '').replace('_normal','')
if backend.name == 'google-oauth2':
try:
url = response["picture"]
except KeyError:
url = response['image'].get('url')
get_file = download(url)
file_name = url.split('/')[-1]
extension = 'jpeg'
f = BytesIO(get_file)
out = BytesIO()
image = Image.open(f)
image.save(out, extension)
def download(url):
try:
r = requests.get(url)
if not r.status_code == 200:
raise Exception('file request failed with status code: ' + str(r.status_code))
return (r.content)
except Exception as ex:
return ('error')