rails api

时间:2015-12-29 05:43:40

标签: ruby-on-rails oauth-2.0 google-api omniauth google-api-client

我有一个使用google-api-client和omniauth-google-oauth2宝石的rails应用程序。我想整合谷歌日历。我尝试使用下面的代码进行身份验证,但失败了。

问题是,当我更改范围时,让我们说:scope: ['email']或甚至scope: ['hahahaha']我从谷歌获得了相同的响应,该响应显示在代码下方。玩了一段时间之后,我放弃了等待一段时间然后再次尝试,我得到了一个新的错误响应。我试图改变代码,但这次又遇到了另一个错误。是否有时间限制或为什么在更改代码后没有立即更新响应?

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, ENV['GOOGLE_API_KEY'], ENV['GOOGLE_API_SECRET'], {
    scope: ['email, profile, calendar'],
    access_type: 'offline'
  }
end
来自Google的

错误消息:

错误:invalid_scope

某些请求的范围无效。 {valid = https://www.googleapis.com/auth/calendar,[invalid =个人资料,https://www.googleapis.com/auth/email,]}

1 个答案:

答案 0 :(得分:1)

根据omniauth-google-oauth2文档scope应该是一个逗号分隔范围的字符串。但是你在代码中使用了一个数组。所以scope: "email, profile, calendar"应该有用。

对于随时间变化的响应,您在Rails应用中使用Spring吗? Spring允许您通过在第一次运行期间预加载来加快Rails应用程序的加载速度。然后,当您再次运行rails时,它会使用此预加载的应用。更改应用程序配置后,您必须重新启动应用程序才能使更改生效。如果你只是重新启动rails它就不会起作用,因为Spring仍然在内存中运行一个应用程序。因此,如果您使用Spring,则必须在更改应用配置后重新启动它,如下所示:

spring stop
rails s