1

以下是我想做的事 -google-api-client gem,fetch_access_token! - “无效的请求”

client = Google::APIClient.new 
client.authorization.client_id = 'XXXX' 
client.authorization.client_secret = 'XXXXX' 
client.authorization.scope = 'https://www.googleapis.com/auth/calendar' 
client.authorization.redirect_uri = 'http://www.aaaaa.com/' 
calendar = client.discovered_api('calendar', 'v3') 

为了得到ACCESS_TOKEN做进一步的要求,我打个电话给 client.authorization.fetch_access_token!

响应我得到的是:

Signet::AuthorizationError: Authorization failed. Server message: 
{ 
    "error" : "invalid_request" 
} 
from D:/main/tools/jruby/lib/ruby/gems/1.8/gems/signet-0.4.4/lib/signet/oauth_2/client.rb:865:in `fetch_access_token' 

后来我改做了一些修改,并设置grant_type密码和提供的用户名和密码。

client.authorization.grant_type = 'password' 
client.authorization.username = 'aaaaa' 
client.authorization.password = 'aaaaa' 

仍然面临同样的问题。

文档不是很有帮助。有没有我错过的设置?

+0

invalid_request(这意味着有一个400下的封面)通常意味着请求是某种格式不正确。假设你的客户端已经注册,你的代码看起来很健康。有更多的调试输出可用? – 2013-03-08 19:58:29

回答

0

您可能已经知道了这一点,但我想我知道问题所在。您必须首先浏览(在浏览器中)client.authorization.authorization_uri,这是您将被要求授予对Google帐户访问权限的位置。之后,您将被重定向到client.authorization.redirect_uri,即您提供的代码中的http://www.aaaaa.com/。将在URL上附加一个授权代码:http://www.aaaaa.com?code=<code here>。您必须设置client.authorization.code等于该授权码。完成之后,您应该能够呼叫client.authorization.fetch_access_token!,然后调用API。