Marchie,
Я не вижу остальной части трассировки вашего стека, но могу дать три конкретных проблемы с соответствующими решениями, которые решат вашу общую проблему.
Проблема I: значение redirect_uri
не задано для объекта.
Обратите внимание, как тело запроса указано в get_access_token
:
body = urllib.urlencode({
'grant_type': 'authorization_code',
'client_id': self.client_id,
'client_secret': self.client_secret,
'code': code,
'redirect_uri': self.redirect_uri,
'scope': self.scope
})
Это зависит от redirect_uri
свойство, устанавливаемое на объекте к значению, которое было первоначально установлено в generate_authorize_url
.Итак, после восстановления токена с помощью вызова
token = gdata.gauth.OAuth2Token(...)
вам просто нужно установить URI перенаправления:
token.redirect_uri = 'http://path/that/you/set'
Проблема II : значение по умолчанию redirect_uri
неверно (точнее, устарело).
Поскольку вы вызывали generate_authorize_url
без аргументов, использовалось значение по умолчанию для redirect_uri
, которое в настоящее время oob
.Что касается состояния OAuth 2.0 docs , то oob
не входит в число поддерживаемых значений (оно устарело).
Если вы действительно используете Установленное приложение, вам потребуется вместо этогоустановите его на
token.redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'
Кроме того, когда вы вызываете generate_authorize_url
, чтобы получить начальный токен, вам нужно будет использовать его в качестве параметра ключевого слова
url = token.generate_authorize_url(redirect_uri='urn:ietf:wg:oauth:2.0:oob')
ПроблемаIII : вы звоните get_access_token
с неправильным значением (также не указанным в вашем фрагменте кода).
Вы должны вызывать это с использованием строкового значения кода, который вы получилипосле авторизации или со словарем, который имеет 'code'
в качестве ключа.
Это можно сделать с помощью следующего:
import atom.http_core
# Page the user is redirected to after authorizing
redirected_page = 'http://path/that/you/set?code=RANDOM-CODE'
uri = atom.http_core.ParseUri(redirected_page)
# uri.query is a dictionary with the query string as key, value pairs
token.get_access_token(uri.query)
Post Script : Автор патч также опубликовал сообщение в блоге об использовании патча.(Обратите внимание, что в сообщении есть опечатка, когда в функции generate_authorize_url
используется ключевое слово redirect_url
.
)