【问题标题】:google-api-client gem, fetch_access_token! - "Invalid Request"google-api-client gem,fetch_access_token! - “非法请求”
【发布时间】:2013-02-28 08:32:18
【问题描述】:

以下是我想要做的 -

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'

仍然面临同样的问题。

文档没有多大帮助。有没有我遗漏的设置?

【问题讨论】:

  • invalid_request (这意味着有一个 400 在封面下)通常意味着请求格式不正确。假设您的客户已注册,您的代码看起来很正常。还有更多可用的调试输出吗?

标签: oauth-2.0 google-calendar-api google-oauth google-api-client google-api-ruby-client


【解决方案1】:

您可能已经想通了,但我想我知道问题出在哪里。您必须首先(在浏览器中)导航到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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    相关资源
    最近更新 更多