2017-02-07 46 views
1

按照本教程中的步驟,我可以通過API將文件上傳到我的Google雲端硬盤,優先級爲無需用戶進行確認同意。通過PHP將文件上傳到Google雲端硬盤,使用API​​不同意屏幕

How do I authorise an app (web or installed) without user intervention? (canonical ?)

然而,我注意到,刷新令牌每次必須進行更新,爲此,我找了另一種解決方案來發送文件未經同意屏幕被髮送給用戶。

http://ben.akrin.com/?p=2080

在第一個小時內一切順利,但是,現在不返回TOKEN,因此不再進行上傳。

<?php 
 

 
function get_access_token($force_refresh=false) { 
 
    global $client_id, $client_secret, $refresh_token, $verbose ; 
 

 
    if($verbose) { echo "> retrieving access token<br />" ; } 
 

 
    $token_filename = "/tmp/access_token_" . md5($client_id . $client_secret . $refresh_token) ; 
 
    $access_token = "" ; 
 

 
    if(!file_exists($token_filename) || $force_refresh===true) { 
 

 
\t  // no previous access token, let's get one 
 
\t  if($verbose) { echo "> getting new one<br />" ; } 
 

 
\t  $ch = curl_init(); 
 
\t  curl_setopt($ch, CURLOPT_URL, "https://accounts.google.com/o/oauth2/token") ; 
 
\t  curl_setopt($ch, CURLOPT_PORT , 443) ; 
 
\t \t curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) ; 
 
\t  curl_setopt($ch, CURLOPT_POST, 1) ; \t  
 
\t  curl_setopt($ch, CURLOPT_POSTFIELDS, "client_id={$client_id}&client_secret={$client_secret}&refresh_token={$refresh_token}&grant_type=refresh_token") ; 
 
\t  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) ; 
 
\t  curl_setopt($ch, CURLOPT_HEADER, true) ; 
 
\t  curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded")) ; 
 
\t \t 
 
\t \t echo "Curl error: " . curl_error($ch) . "<br />"; 
 

 
\t  $response = curl_exec($ch) ; 
 
\t  $response = parse_response($response) ; 
 

 
\t  // todo: make sure that we got a valid response before retrieving the access token from it 
 

 
\t  $access_token = json_decode($response["body"]) ; 
 
\t  $access_token = $access_token->access_token ; 
 
\t  file_put_contents($token_filename, $access_token) ; 
 
\t } else { 
 

 
\t \t // we already have something cached, with some luck it's still valid 
 
\t  $access_token = file_get_contents($token_filename) ; 
 
\t  if($verbose) { echo "> from cache<br />" ; } 
 
\t } 
 

 
\t if($access_token=="") { 
 
\t \t echo "ERROR: problems getting an access token<br />" ; 
 
\t \t exit(1) ; 
 
\t } 
 

 
    return $access_token ; 
 
} 
 

 
?>

是否有可能未經同意屏幕,而不需要總是更新此令牌我與谷歌驅動器的應用程序進行整合?

回答

2

我寫了你提到的答案。

您誤解了刷新標記是什麼。一旦你有一個刷新令牌,你應該安全地存儲它,並在需要訪問令牌時重用它。刷新令牌不會過期 - 通常情況下不會,見下文。所以,當你說「我注意到刷新令牌必須每次更新」時,這是不正確的。

您通常只會在第一次請求時纔會獲取刷新令牌。隨後的請求將返回一個空值。用戶需要撤銷授權並重新授權才能獲得另一個令牌。但是,您應該再次存儲您獲得的第一個刷新令牌,並無限期地重用該令牌。

即將過期的刷新令牌... 雖然刷新令牌的壽命非常長,但它們有時會由Google過期。一種情況(我從傳聞中相信)是,如果用戶更改密碼,令牌可能會過期。這是有道理的,因爲存儲的刷新令牌大致類似於存儲的用戶名/密碼。我還看到令牌在創建後6個月左右沒有明顯的理由到期。

+0

是的,我完全同意你的看法,但是我的問題是它不允許我運行這個API,我的文件沒有像以前那樣進入我的Google Drive。 Google可以爲我的域名或某事做些什麼?我甚至將所有數據都更改爲另一個帳戶,即使這樣,問題仍然存在。 –

+1

您需要解釋「它不會讓我運行此API」,並且「我的文件沒有像以前那樣進入我的Google Drive」。也許發佈一個單獨的問題,顯示任何錯誤消息,http跟蹤等 – pinoyyid

+0

我不知道如何解釋它,但它執行上傳通常這些文件顯示在谷歌驅動器,現在他們不再出現,因爲發生錯誤當使用此API發送文件時。 我正在使用你的方法來獲取TOKEN並將其填充到代碼ben.akrin.com/?p=2080中的變量中。對於每一個所執行的操作,它返回一條消息,在我的情況,這些是消息: > mime類型檢測:圖像/ JPEG >檢索從緩存 ERROR訪問令牌 >:問題得到的訪問令牌 –

相關問題