具有离线访问功能的 Omniauth google oauth2 策略

发布于 2024-12-24 18:57:18 字数 438 浏览 1 评论 0原文

我正在尝试使用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,但它失败了(如果我手动添加参数,它工作正常)。

我错过了什么吗?

I'm trying to get offline access token (refresh_token) with omniauth google-oauth2 strategy.

This is my omniauth initializer code:

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

When redirecting to google for the oauth2 authentication, it should add an extra URL parameter like &access_type=offline, but it fails to do so (it works fine if I add the parameter manually).

Am I missing something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜清冷一曲。 2024-12-31 18:57:18

如果您将 Omniauth 与 zquestz 的 google_oauth2 策略结合使用,则如果未指定,则 access_type 的默认值为离线。

来自他的 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 =>;用户信息.个人资料}。

If you are using Omniauth with zquestz's google_oauth2 strategy, then the default value for the access_type is offline if it is not specified.

From his github in *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

As a side note I believe the scope field is supposed to be in a hash: { :scope => userinfo.profile }.

记忆で 2024-12-31 18:57:18

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

Fixed this by upgrading zquestz/omniauth-google-oauth2 to version 0.1.8.
Apparently this problem only occurs in 0.1.7.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文