在我的机器上遇到了一些SSL 问题后,我仍在尝试通过 Google Ruby Client API 访问用户的 Blogger 帐户。我正在使用以下内容:
- 导轨 3.2.3
- 红宝石 1.9.3
- oauth2 (0.8.0)
- 全域认证 (1.1.1)
- omniauth-google-oauth2 (0.1.13)
- 谷歌 api 客户端 (0.4.6)
我可以在验证时通过 Google API 成功验证用户并访问他们的博客。当用户登录时,我存储access_token
并refresh_token
从 Google 收到。一切都很好,直到access_token
到期。我正在尝试构建将 替换refresh_token
为新的功能access_token
,但不断遇到墙壁。以客户端文档为例,这是我正在使用的代码:
client = Google::APIClient.new
token_pair = auth.oauth_token # access_token and refresh_token received during authentication
# Load the access token if it's available
if token_pair
client.authorization.update_token!(token_pair.to_hash)
end
# Update access token if expired
if client.authorization.refresh_token && client.authorization.expired?
client.authorization.fetch_access_token!
end
blogger = client.discovered_api('blogger', 'v3')
result = client.execute(
api_method: blogger.blogs.list_by_user,
parameters: {'userId' => "self", 'fields' => 'items(description,id,name,url)'},
headers: {'Content-Type' => 'application/json'})
此代码在access_token
有效时完美运行。但是,一旦到期,我就会看到两个问题:
- 即使我知道令牌已过期(我已经检查
expires_at
了数据库中的值),client.authorization.expired?
返回false
- 除了使用数据库中的值之外,还有其他方法可以检查令牌的过期吗? - 当我强制执行时,
client.authorization.fetch_access_token!
我得到一个invalid_request
错误。
有人可以告诉我如何使用客户端 APIrefresh_token
换新的吗?access_token
即使你知道如何用另一种语言来做,那也会有很大的帮助,因为我可以尝试 Rubyfy 它。谢谢!!