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。