2015-07-07 5 views
0

Я пытаюсь использовать Oauth 2.0 для доступа к API Google в установленном приложении. Я хочу, чтобы пользователь предоставлял доступ только один раз, а затем использовал токен обновления, чтобы получить новые токены доступа для работы с api.токен обновления OAuth 2.0 для установленных приложений

Пользователь использует этот код, чтобы дать разрешение на применение:

flow = client.flow_from_clientsecrets(
'client_secrets.json', 
scope='https://apps-apis.google.com/a/feeds/emailsettings/2.0/', 
redirect_uri='urn:ietf:wg:oauth:2.0:oob') 


auth_uri = flow.step1_get_authorize_url() 
webbrowser.open(auth_uri) 

auth_code = raw_input('Introduce the code: ') 

credentials = flow.step2_exchange(auth_code) 

f = file("Pass.txt", "w") 
f.write(credentials.to_json()) 
f.close() 

И тогда ПРИМЕНЕНИЕ использует этот другой код каждый день, чтобы использовать API:

f = open("Pass.txt", "r") 
credentials = client.OAuth2Credentials.from_json(f.read()) 
f.close() 

client = gdata.apps.emailsettings.client.EmailSettingsClient(domain=domain_name) 
client.auth_token = gdata.gauth.OAuth2TokenFromCredentials(credentials) 

Этот код работает для неделю, а затем прекращает работу, бросая следующую ошибку:

gdata.client.Unauthorized: Unauthorized - Server responded with: 401, <HTML> 
<HEAD> 
<TITLE>Token invalid - Invalid token: Token not found</TITLE> 
</HEAD> 
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 
<H1>Token invalid - Invalid token: Token not found</H1> 
<H2>Error 401</H2> 
</BODY> 
</HTML> 

Кто-нибудь сейчас, что я с этим кодом?

Спасибо.

ответ

0

Когда маркер истекает, и сервер возвращает 401, вы должны использовать метод refresh на учетные данные объекта, чтобы получить новый маркер доступа и писать, что обратно в хранилище, так что вы хотите запустить:

f = open("Pass.txt", "r") 
credentials = client.OAuth2Credentials.from_json(f.read()) 
f.close() 

http = httplib2.Http() 
credentials.refresh(http) 

f = file("Pass.txt", "w") 
f.write(credentials.to_json()) 
f.close()