【问题标题】:rails refreshing scope request for google api谷歌API的Rails刷新范围请求
【发布时间】:2018-09-12 23:15:17
【问题描述】:

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

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

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

来自谷歌的错误消息:

错误:invalid_scope

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

【问题讨论】:

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


    【解决方案1】:

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

    关于随时间变化的响应,您在 Rails 应用程序中使用Spring 吗? Spring 允许您通过在第一次运行时预加载 Rails 应用程序来更快地加载它。然后,当您再次运行rails 时,它会使用这个预加载的应用程序。更改应用程序配置后,您必须重新启动应用程序才能使更改生效。如果您只是重新启动rails,它将无法正常工作,因为 Spring 仍在内存中运行应用程序。因此,如果您使用Spring,您还必须在更改应用配置后重新启动它,如下所示:

    spring stop
    rails s
    

    【讨论】:

    • Jeiwan,感谢宝石github.com/zquestz/omniauth-google-oauth2 我必须使用这种方式(我的意思是类似的),只是目前还不确定哪个版本应该工作。如果谷歌在更改我的代码后立即发回新响应,我可以尝试所有我发现的组合/版本。你不知道为什么我更改代码时没有收到新的响应吗?
    • Jeiwan,谢谢它现在可以使用。我不使用弹簧并每次都重新启动服务器。也许数组导致了这个奇怪的问题。
    猜你喜欢
    • 1970-01-01
    • 2016-08-27
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2018-02-19
    相关资源
    最近更新 更多