如何使用social-auth-app-django获取gmail社交头像

时间:2019-06-04 07:13:07

标签: django python-3.x django-socialauth

我用Google搜索了一些有用的链接,以获取gmail头像。我使用了 social-auth-app-django 库,并按照 link来设置功能。身份验证可以正常工作,但会卡在头像上。我在项目主要配置的根目录下创建了 pipeline.py ,并在我的视图内调用了该名称,例如从TestDjangoAuth.pipeline import get_avatar 中调用了。 这是我检索化身的正确方法吗?另一个查询是如何在views.py中使用管道方法,例如我们在 SOCIAL_AUTH_PIPELINE

中调用的 user_details get_username

这是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

当我返回要在我的视图中使用个人资料图片的网址时,会出现以下错误

AttributeError at /auth/complete/google-oauth2/

'str' object has no attribute 'backend'

1 个答案:

答案 0 :(得分:0)

我终于通过使用以下代码段通过谷歌搜索并进行了一些修改解决了我的问题。

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')