保存Google云端硬盘访问令牌以供将来通话

时间:2014-02-27 15:20:05

标签: php oauth token google-drive-api

我使用Google的Drive API和PHP示例创建了一组PHP脚本,但我似乎无法缓存授权请求...

<?php

    echo 'This is a new request... setting parameters';
    $drive_fileid=$_GET['drive_fileid'];
    $drive_userid=$_GET['drive_userid'];
    $drive_permission=$_GET['drive_permission'];


    $_SESSION['drive_fileid']=$drive_fileid;
    $_SESSION['drive_userid']=$drive_userid;
    $_SESSION['drive_permission']=$drive_permission;


if($_SESSION['drive_fileid']==''){
        echo 'Invalid drive file id. Aborting...';
        exit;
        } else $drive_fileid=$_SESSION['drive_fileid'];

if($_SESSION['drive_userid']==''){
        echo 'Invalid drive user id. Aborting...';
        exit;
        } else $drive_userid=$_SESSION['drive_userid'];

if($_SESSION['drive_permission']==''){
        echo 'Invalid drive permission. Aborting...';
        exit;
        } else $drive_permission=$_SESSION['drive_permission'];


// Now, if we have been through all this before, lets grab stored tokens...
// These never seem to work.

$getFormSQL="SELECT * from `users` where email='".$email."'";
$getFormData=mysql_query($getFormSQL) or die("Died trying to get auth token from the database with this user");
$formRow = mysql_fetch_array($getFormData);
$oauthToken=$formRow['driveoauth'];
$oauthAccessToken=$formRow['driveoauthaccess'];


require_once 'src/Google_Client.php';
require_once 'src/contrib/Google_DriveService.php';


$client = new Google_Client();
$client->setClientId('myappid.apps.googleusercontent.com');
$client->setClientSecret('myclientsecret');
$client->setRedirectUri('https://www.mywebsite.net/driveapi/oauth2callback');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
$service = new Google_DriveService($client);
$authUrl = $client->createAuthUrl();   


// Since we have no token, we redirect the user to the Google Auth page...
if($oauthToken=='')header( 'Location: '.$authUrl ) ;



$authCode = trim($oauthToken);


// Try authenticate access token    
try {
    $client->setAccessToken($oauthAccessToken);
    $authed=1;
} catch (Exception $e) {
    echo '<P>Couldnt authenticate access token';
    $authed=0;
}

// If that didn't work, lets generate a new one
if($authed==0){
    try {
        $accessToken = $client->authenticate($authCode);
        $client->setAccessToken($accessToken);
    } catch (Exception $e) {
         header( 'Location: '.$authUrl ) ;
    }

echo 'Got an access token: '.$accessToken;

// Save access token
$accessData=json_decode($accessToken,true);
echo '<P>Extracted and saved: '.$accessData['access_token'].'<P>';
        $updateQuery ="UPDATE `users` ";
        $updateQuery.=" set ";
        $updateQuery.="driveoauthaccess='".$accessData['access_token']."'";
        $updateQuery.=" where email='".$email."'";

        mysql_query($updateQuery) or die("Unable to update database! ".mysql_error());

}


echo '<P><B>Existing permissions on the file/folder:</B><BR>';

$existingpermissions= $service->permissions->listPermissions($drive_fileid);
$existingpermissionarray=$existingpermissions['items'];


?>

为什么我无法重复使用我生成的令牌?

0 个答案:

没有答案