我必须直接在drupal上的google驱动器上传文件。我已经为此创建了一个自定义模块。
$client = new Google_Client();
$client->setAccessType('online');
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->addScope("https://www.googleapis.com/auth/drive");
$service = new Google_Service_Drive($client);
//parameter got from code
if (isset($_REQUEST['logout'])) {
unset($_SESSION['upload_token']);
}
if (isset($params['code'])) {
try{
$client->authenticate($params['code']); //client Authenticate with OAuth2 code
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n"; //Exception Caught
}
$_SESSION['upload_token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}
//access token value saved in session
//print_r($_SESSION['upload_token']); "<br>";
if (isset($_SESSION['upload_token']) && $_SESSION['upload_token']) {
//$about = $service->about->get();
//echo '<pre>12';print_r($about);
$client->setAccessToken($_SESSION['upload_token']);
if ($client->isAccessTokenExpired()) {
unset($_SESSION['upload_token']);
//drupal_goto('http://localhost/drupal/drivefile/form');
//drupal_set_message(t('Access Token expired.'), 'error');
}
}
else {
$auth_url = $client->createAuthUrl();
}
/************************************************
If we're signed in then lets try to upload our
file.
************************************************/
if ($client->getAccessToken()) {
// Now lets try and send the metadata as well using multipart!
$file = new Google_Service_Drive_DriveFile();
$file->setTitle($_SESSION['filename']);
try{
$fileupload = "public://" . $_SESSION['filename'];
$data = file_get_contents($fileupload);
$result2 = $service->files->insert(
$file, array(
'data' => $data,
'mimeType' => $_SESSION['mimetype'],
'uploadType' => 'multipart'
)
);
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n"; //Exception Caught
}
}
问题是假设我从邮件ID中获取了访问令牌,并且该文件已上传到该ID,之后我没有从我的网站注销。我已经从gmail id登出但是我的网站上的访问令牌存在于我的网站中,我再次上传文件而不是我之前的mailid上的代码上传文件而不是第二个id,因为我网站上的访问令牌存在并且与第一个相关联邮件ID,所以它上传第一个id。请给我一个解决这个问题的方法。谢谢提前
答案 0 :(得分:0)
访问GMail并通过访问令牌访问Drive是不同的。将GMail视为您无法控制的另一个应用程序。它具有来自您的应用程序的不同访问令牌。有了这个,如果您退出GMail并且您的webapp的凭据没有 - 它仍将执行您的webapp所做的预期功能(即将文件上传到云端硬盘)。
您可以做的是在您的webapp上注销用户,以便撤销访问令牌。另一个用户可以登录,将向他/她提供新的访问令牌。