我有一个使用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,]}
答案 0 :(得分:1)
根据omniauth-google-oauth2文档scope
应该是一个逗号分隔范围的字符串。但是你在代码中使用了一个数组。所以scope: "email, profile, calendar"
应该有用。
对于随时间变化的响应,您在Rails应用中使用Spring
吗? Spring
允许您通过在第一次运行期间预加载来加快Rails应用程序的加载速度。然后,当您再次运行rails
时,它会使用此预加载的应用。更改应用程序配置后,您必须重新启动应用程序才能使更改生效。如果你只是重新启动rails
它就不会起作用,因为Spring仍然在内存中运行一个应用程序。因此,如果您使用Spring
,则必须在更改应用配置后重新启动它,如下所示:
spring stop
rails s