如何在使用Google Calendar API Ruby Library时获取刷新令牌?

9w11ddsr  于 2023-05-28  发布在  Ruby
关注(0)|答案(1)|浏览(118)

我是一个新手,试图将Google Calendar API实现到一个基于Web的应用程序中,在遵循他们提供给T的说明后,获取信息只工作了大约20分钟(而访问令牌仍然有效)。我知道你需要一个刷新令牌来生成一个新的访问令牌,但是从终端运行这个脚本(google在他们的文档中提供了)并不提供刷新令牌。
我在终端中执行的代码:google-api oauth-2-login --scope=https://www.googleapis.com/auth/calendar --client- id=CLIENT_ID --client-secret=CLIENT_SECRET
这生成了一个.yaml文件,其中包含我所有的密钥,看起来像这样:

---
mechanism: oauth_2
scope: SCOPE_HERE
client_id: CLIENT_ID_HERE
client_secret: CLIENT_SECRET_HERE
access_token: ACCESS_TOKEN_HERE
refresh_token:

以及他们在访问令牌过期时提供的代码:

oauth_yaml = YAML.load_file('.google-api.yaml')
client = Google::APIClient.new
client.authorization.client_id = oauth_yaml["client_id"]
client.authorization.client_secret = oauth_yaml["client_secret"]
client.authorization.scope = oauth_yaml["scope"]
client.authorization.refresh_token = oauth_yaml["refresh_token"]
client.authorization.access_token = oauth_yaml["access_token"]

if client.authorization.refresh_token && client.authorization.expired?
  client.authorization.fetch_access_token!
end

service = client.discovered_api('calendar', 'v3')

因此,根据yaml文件,client.authorization.refresh_token始终为'nil',并且它永远不会获得新的访问令牌。还有客户授权过期了吗总是返回false,即使在应用程序停止工作之后。我在这里看到了一些关于同一问题的其他问题,但是由于我是通过终端命令生成令牌的,所以我不太确定如何获取刷新令牌。

ttp71kqs

ttp71kqs1#

您需要指定您希望脱机访问以获取刷新令牌:access_type=离线
参见https://developers.google.com/accounts/docs/OAuth2WebServer#offline

相关问题