Flask Oauth2从profile-picture-json获取Google+个人资料图片网址

时间:2017-01-28 22:09:58

标签: json api flask google-plus oauth2

我在从profile-picture-json获取Google+个人资料图片网址时遇到问题。我是一个初学者,这是我的第一个webapp,所以请考虑到这一点。

我的回调函数:

def callback(self):
    self.validate_oauth2callback()
    oauth_session = self.service.get_auth_session(
            data={'code': request.args['code'],
                  'grant_type': 'authorization_code',
                  'redirect_uri': self.get_callback_url()
                 },
            decoder=jsondecoder
    )
    me = oauth_session.get('').json()
    social_id = 'google$' + me['sub']
    username = me.get('name', None) if me.get('name', None) else me['email'].split('@')[0]
    email = me['email'] if me['email_verified'] == True else None
    url = me.get('profile', None)
    image_json = 'https://www.googleapis.com/plus/v1/people/' + me['sub'] + '?fields=image&key=AIz..yAl..juCqj..sjj9y..PuM..R..9..F8p..mo'
    image = image_json['image'] # <-- THIS DOESN'T WORK
    return social_id, username, email, url, image, me

我的问题是变量image_json包含以下内容:

{
 "image": {
  "url": "https://lh6.googleusercontent.com/-f..i0..dl..Gc/AAAAAAAAAAI/AAAAAAAAABQ/iNw-IEz...o/photo.jpg?sz=50",
  "isDefault": false
 }
}

我必须从中提取profile-picture-url。子串方法不起作用,因为为了获得该代码,我必须“运行”image_json中保存的URL。 我需要的是image = image_json['image']之类的东西来检索字符串:

"https://lh6.googleusercontent.com/-f..i0..dl..Gc/AAAAAAAAAAI/AAAAAAAAABQ/iNw-IEz...o/photo.jpg?sz=50"

我希望将该大小更改为256而不是50。 我已经关注了很多帖子,但我没有找到解决方案。

将调用此函数的视图如下:

@auth.route('/callback/<provider>')
def oauth_callback(provider):
    oauth = OAuthSignIn.get_provider(provider)
    social_id, username, email, url, image, jsonme = oauth.callback()

    if social_id is None:  
        flash('Authentication failed! Access to ' + provider + ' denied.')
        return redirect(url_for('main.home'))

    user = User.query.filter_by(email=email).first()

    if not user:  
        user = User(social_id=social_id, username=username, email=email, social_page=url, social_image=image)
        db.session.add(user)
        db.session.commit()

    else:  

       ...

    login_user(user, True)
    return redirect(url_for('main.home'))

0 个答案:

没有答案