2015-07-21 113 views
6

我已經在我的PHP應用程序中正確實施了Google API客戶端。我能夠連接到我想要的服務。如何檢查Google客戶端API密鑰對Google PHP API庫是否有效?

但是現在我想檢查用戶輸入的API密鑰是否有效。

我看了看周圍或由Google_Client()類暴露的方法,但我不認爲我確定如何檢查此問題。

以下這裏是我的類,它創建了一個客戶端的方法:

private function client($api_key) { 

     $client = new \Google_Client(); 
     $client->setClassConfig('Google_Cache_File', 'directory', $this->cache_dir); 
     $client->setDeveloperKey($api_key); 
     $client->setApplicationName($this->name); 
     $client->setScopes(array(\Google_Service_Calendar::CALENDAR_READONLY)); 
     $client->setAccessType('online'); 

     return $client; 
    } 

我不想再拍方法來告訴如果所使用的API密鑰有效或不...

public function validate_api_key($api_key) { 
     $client = $this->client($api_key); 

     // What should I use here to check if $api_key is valid? 

     if ($client) { 
      return true; 
     } 
     return 'error'; 
    } 

或者我應該連接到服務,然後檢查是否有從那裏讀取訪問? 但我相信有一個更簡單和更好的方法來做到這一點...

+0

我應該連接到服務,然後檢查是否有讀取權限?我敢肯定,這是他們唯一的方法來測試其有效的 – DaImTo

+0

好啊...我希望,雖然在客戶端對象的直接方法返回一個布爾或東西......事情是,谷歌_客戶端或一個谷歌服務實例化客戶端仍然會嘗試連接並且服務將作出響應,因此通過提取數據驗證api密鑰是否有效的步驟實際上是不少實際的 – unfulvio

+1

是的,但是lib驗證它的唯一方法是發送請求。我乾旱谷歌公開了其密鑰的格式。即使checkToken()看​​起來只是試圖發出一個虛擬請求。 – DaImTo

回答

1

你可以檢查JavaScript的;一個不正當的鑰匙總是會設置無證的財產window.G_INCOMPAT。可能需要使用function alert() {}進行修補,以排除無效密鑰的alert(),這隻會干擾設置密鑰的過程。

answer有關於alert()

也有記錄功能,可以掛接到一個有趣的方法: https://developers.google.com/maps/documentation/javascript/events#auth-errors

如果真的必須是PHP,你仍然可以產生一些JS和用PhantomJS運行它。

看到我的Github:php-phantomjs ......這不是不可能的。