2015-07-21 71 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 ......这不是不可能的。