Question

I already stored the access and refresh token in my database. I want get the google client using that. I don't know how to use it in below example

$client = Zend_Gdata_ClientLogin::getHttpClient('you@there.com', 'password', Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME);
$service = new Zend_Gdata_Spreadsheets($client);

// Get worksheet feed
$query = new Zend_Gdata_Spreadsheets_DocumentQuery();
$query->setSpreadsheetKey('your spreadsheet key');
$feed = $spreadsheetService->getWorksheetFeed($query);

I want replace email and password with access token. Someone help me how to do that. I tried below. but I got only exception

Caught exception: Expected response code 200, got 401

and Stateless token expired

$client = Zend_Gdata_AuthSub::getHttpClient('ya29.XXXXXXX'); 

Another try,

$client = new Zend_Gdata_HttpClient();
$session_token =Zend_Gdata_AuthSub::getAuthSubSessionToken('ya29.XXXXXXX',$client);
$client->setAuthSubToken($sessionToken);

Caught exception: Token upgrade failed. Reason:

Was it helpful?

Solution

I think you are mixing things up.

ClientLogin and AuthSub are different authentication APIs (both deprecated). The ClientLogin token expires after two weeks or earlier (see: https://developers.google.com/gdata/faq#clientlogin_expire). You can use the token as long as it does not expire by calling the setter setClientLoginToken of Zend_Gdata_HttpClient.

Example:

$client = Zend_Gdata_ClientLogin::getHttpClient('email@example.com', 'password', Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME);
$token = $client->getClientLoginToken();
//Save to DB / in session / whatever
$client = new Zend_Gdata_HttpClient();
$client->setClientLoginToken($token);
//Do stuff

You can also cache the whole HttpClient object with Zend_Cache.

AuthSub or OAuth 2.0 (better, but no classes provided by ZF) is maybe better for your needs, because the tokens do not expire (AuthSub) or can be refreshed (OAuth2)

Docs

AuthSub:

OAuth2:

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top