У объекта 'OAuth2Token' нет атрибута 'authorize' даже при установленном google-auth-httplib2 - PullRequest
0 голосов
/ 08 июня 2019

При попытке создать ресурс API Google я получаю сообщение об ошибке

'OAuth2Token' object has no attribute 'authorize'

Я прочитал здесь, что решение устанавливает google-auth-httplib2, но я установил и все еще сталкиваюсь с ошибкой.


class Oauth2CallbackView(View):

    def get(self, request, *args, **kwargs):
        flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
            CLIENT_SECRETS_FILE, scopes=SCOPES)
        flow.redirect_uri = 'http://127.0.0.1:8000/profiles/oauth2callback/'

        credentials = flow.fetch_token(code=self.request.GET.get('code'))

        b = build(API_SERVICE_NAME, API_VERSION, credentials=credentials)

        return redirect('http://127.0.0.1:8000/profiles/')

PipFreeze:

cachetools==3.1.1
certifi==2019.3.9
chardet==3.0.4
Click==7.0
defusedxml==0.6.0
dj-database-url==0.5.0
Django==2.2.1
django-allauth==0.39.1
django-appconf==1.0.3
django-heroku==0.3.1
django-image-cropping==1.2.0
django-multiselectfield==0.1.8
easy-thumbnails==2.6
Flask==1.0.3
google-api-python-client==1.7.9
google-auth==1.6.3
google-auth-httplib2==0.0.3
google-auth-oauthlib==0.3.0
gunicorn==19.9.0
httplib2==0.12.3
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10.1
jsonpickle==1.2
MarkupSafe==1.1.1
oauthlib==3.0.1
Pillow==6.0.0
psycopg2==2.8.2
pyasn1==0.4.5
pyasn1-modules==0.2.5
python-dotenv==0.10.2
python3-openid==3.1.0
pytz==2019.1
requests==2.22.0

1 Ответ

1 голос
/ 09 июня 2019

Вы используете flow.fetch_token неправильно.Возвращаемое значение - не объект credentials, а набор токенов.Документация объясняет, что вы не должны использовать это:

Возвращает полученные токены.Как правило, вы не будете использовать возвращаемое значение этой функции, а вместо этого будете использовать credentials() для получения экземпляра Credentials.

Что вам нужно сделать, это примерно так:

flow.fetch_token(code=self.request.GET.get('code'))
# The credentials are available in flow.credentials, not the return value
b = build(API_SERVICE_NAME, API_VERSION, credentials=flow.credentials)
...