Google日历集成在Rails应用程序中

时间:2013-06-14 22:53:07

标签: ruby-on-rails ruby omniauth google-calendar-api google-api-ruby-client

我的rails应用程序将允许创建约会。然后应将这些约会导出到每个用户的Google日历。

我已安装 omniauth-google-oauth2 ,并获取了 api密钥 client_id client_secret 来自Google API控制台的Web应用程序。

我可以使用 omniauth 对用户进行身份验证,并将 access_token refresh_token expires_at 日期存储到我的数据库中,供以后使用。

当需要将事件导出到每个用户的Google日历(在后台作业中完成)时,我会收到无效凭据的回复。

我做错了什么?

注意:我可以在oauth授权后立即访问用户日历,但经过一段时间后不会。

代码:

sessions_controller

/ auth /:此方法的提供者/回调路由:

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

omniauth config

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 ...

1 个答案:

答案 0 :(得分:2)

似乎我必须从Google API控制台获取已安装应用程序的client_ID和client_secret。仅这一点就解决了这个问题。