我的 Rails 应用程序将允许创建约会。然后应将这些约会导出到每个用户的谷歌日历。
我已经安装了omniauth-google-oauth2,并获得了我的api 密钥、client_id和client_secret。
我可以使用omniauth对用户进行身份验证,并存储access_token, refresh_token和expires_at日期存储到我的数据库中,以备后用。
当需要将事件导出到每个用户的谷歌日历(在后台作业中完成)时,我得到了无效凭据的响应。
我究竟做错了什么?
注意:我可以在他授权 oauth 后立即访问用户日历,但经过一段时间后不能访问。
代码:
session_controller
/auth/:provider/callback 路由到这个方法:
auth = request.env["omniauth.auth"]
# Save token of user
current_user.google_auth_token = auth["credentials"]["token"]
current_user.google_auth_refresh_token = auth["credentials"]["refresh_token"]
current_user.google_auth_expires_at = Time.at auth["credentials"]["expires_at"]
current_user.save
全域认证配置
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"], {
access_type: 'offline',
scope: 'userinfo.email,calendar'
}
end
获得创建用户日历的权限
client = Google::APIClient.new
client.authorization.refresh_token = app.carer.google_auth_refresh_token
client.authorization.access_token = app.carer.google_auth_token
if client.authorization.refresh_token && client.authorization.expired?
client.authorization.fetch_access_token!
end
service = client.discovered_api('calendar', 'v3')
result = client.execute(:api_method => service.calendar_list.list)
# results in auth error, Invalid Credentials ...