Ruby on rails Omniauth google oauth2离线访问策略

Ruby on rails Omniauth google oauth2离线访问策略,ruby-on-rails,google-api,oauth-2.0,offline,omniauth,Ruby On Rails,Google Api,Oauth 2.0,Offline,Omniauth,我正在尝试使用omniauth google-oauth2策略获取脱机访问令牌(刷新令牌) 这是我的omniauth初始值设定项代码: Rails.application.config.middleware.use OmniAuth::Builder do provider :google_oauth2, KEY, SECRET, :access_type => 'offline', :scope => 'https://www.googleapis.com/auth/

我正在尝试使用omniauth google-oauth2策略获取脱机访问令牌(刷新令牌)

这是我的omniauth初始值设定项代码:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, KEY, SECRET,
  :access_type => 'offline', 
  :scope => 'https://www.googleapis.com/auth/userinfo.profile'
end
当重定向到google进行oauth2身份验证时,它应该添加一个额外的URL参数,如&access_type=offline,但它没有这样做(如果我手动添加参数,效果很好)


我遗漏了什么吗?

如果您将Omniauth与zquestz的google_oauth2策略一起使用,那么如果未指定,则access_类型的默认值为offline

从他的github中*omniauth/strategies/oauth2/google_oauth2*:

def authorize_params
    base_scope_url = "https://www.googleapis.com/auth/"
    super.tap do |params|
      scopes = (params[:scope] || DEFAULT_SCOPE).split(",")
      scopes.map! { |s| s =~ /^https?:\/\// ? s : "#{base_scope_url}#{s}" }
      params[:scope] = scopes.join(' ')
      # This makes sure we get a refresh_token.
      # http://googlecode.blogspot.com/2011/10/upcoming-changes-to-oauth-20-endpoint.html
      **params[:access_type] = 'offline' if params[:access_type].nil?
      params[:approval_prompt] = 'force' if params[:approval_prompt].nil?**
    end
  end

顺便说一句,我认为scope字段应该是散列的:{:scope=>userinfo.profile}。

通过将zquestz/omniauth-google-oauth2升级到0.1.8版修复了这个问题。
显然,这个问题只出现在0.1.7中。

是的,你是对的。显然,zquestz/omniauth-google-oauth2的0.1.7版存在默认值问题。我最终通过升级到版本0.1.8解决了这个问题。不过,您如何获取密钥和机密?