【问题标题】:Omniauth google oauth2 strategy with offline accessOmniauth google oauth2 策略与离线访问
【发布时间】:2012-02-01 18:29:51
【问题描述】:

我正在尝试使用 omniauth google-oauth2 策略获取离线访问令牌 (refresh_token)。

这是我的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,但它没有这样做(如果我手动添加参数,它可以正常工作)。

我错过了什么吗?

【问题讨论】:

  • 您如何获得 KEY 和 SECRET?

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


【解决方案1】:

如果您将 Omniauth 与 zquestz 的 google_oauth2 策略一起使用,则 access_type 的默认值如果未指定,则为脱机。

来自他在 *omniauth/strategies/oauth2/google_oauth2* 中的 github:

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 => userinfo.profile }。

【讨论】:

  • 是的,你是对的。显然 zquestz/omniauth-google-oauth2 的 0.1.7 版本的默认值存在问题。我最终通过升级到版本 0.1.8 解决了这个问题
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 2012-09-12
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多