Раут с провайдером Google и python3

У меня возникли проблемы с использованием библиотеки rauth с flask, python3 и google oauth, python2 работает без проблем.

Он говорит TypeError: объект JSON должен быть str, а не 'bytes'

Вот ошибка журнала:

Я нашел эту проблему здесь и попытался преобразовать байт в строку

decoder=lambda b: json.loads(str(b))

но без успеха.

Вот моя реализация

class GoogleSignIn(OAuthSignIn):
def __init__(self):
    super(GoogleSignIn, self).__init__('google')
    self.service = OAuth2Service(
        name='google',
        client_id=self.consumer_id,
        client_secret=self.consumer_secret,
        authorize_url='https://accounts.google.com/o/oauth2/auth',
        access_token_url='https://accounts.google.com/o/oauth2/token',
        base_url='https://www.googleapis.com/plus/v1/people/'
    )

def authorize(self):
    return redirect(self.service.get_authorize_url(
        scope='email',
        response_type='code',
        redirect_uri=self.get_callback_url())
    )

def callback(self):
    if 'code' not in request.args:
        return None, None, None
    oauth_session = self.service.get_auth_session(
        data={'code': request.args['code'],
              'grant_type': 'authorization_code',
              'redirect_uri': self.get_callback_url()},
        decoder=json.loads
    )
    me = oauth_session.get('me').json()
    me_email = None
    for e in me['emails']:
        if e['type'] == 'account':
            me_email = e['value']
    return (
        me.get('id'),
        me.get('displayName'),
        me_email)

Нет другого способа использовать собственный декодер, но не знаю, как это сделать, пожалуйста, помогите мне.

1 ответ

Я нашел некоторые грязные обходные пути с помощью модуля simplejson (также есть метод загрузки, поэтому здесь нечего менять)

импортируя это как

import simplejson as json

до того, как Google класс позволит аутентификации работать как положено

Другие вопросы по тегам