Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google API: getting Credentials from refresh token with oauth2client.client

I am using googles official oauth2client.client to access the google plus api. I have a refresh token (that does not expire) stored in a database, and need to recreate the temporary "Credentials" (access token) from that.

But I could not find a way to do this with to official library supplied by google.

So I hacked around it: used urllib to access the API that gives me a new access_token from the refresh_token. Using the access_token I can then use the library.

I must be missing somthing!

from apiclient import discovery from oauth2client.client import AccessTokenCredentials from urllib import urlencode from urllib2 import Request , urlopen, HTTPError import json  # ==========================================  def access_token_from_refresh_token(client_id, client_secret, refresh_token):   request = Request('https://accounts.google.com/o/oauth2/token',     data=urlencode({       'grant_type':    'refresh_token',       'client_id':     client_id,       'client_secret': client_secret,       'refresh_token': refresh_token     }),     headers={       'Content-Type': 'application/x-www-form-urlencoded',       'Accept': 'application/json'     }   )   response = json.load(urlopen(request))   return response['access_token']  # ==========================================  access_token = access_token_from_refresh_token(CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN)  # now I can use the library properly credentials = AccessTokenCredentials(access_token, "MyAgent/1.0", None) http = credentials.authorize(httplib2.Http()) service = discovery.build('plus', 'v1', http=http) google_request = service.people().get(userId='me') result = google_request.execute(http=http) 
like image 257
bjelli Avatar asked Jan 04 '15 23:01

bjelli


1 Answers

I use: oauth2client.client.GoogleCredentials

    cred = oauth2client.client.GoogleCredentials(access_token,client_id,client_secret,                                           refresh_token,expires_at,"https://accounts.google.com/o/oauth2/token",some_user_agent)     http = cred.authorize(httplib2.Http())     cred.refresh(http)     self.gmail_service = discovery.build('gmail', 'v1', credentials=cred) 
like image 93
leah Avatar answered Sep 21 '22 14:09

leah