【问题标题】:Devise Omniauth, how to link google account设计 Omniauth,如何链接谷歌帐户
【发布时间】:2011-11-17 23:00:21
【问题描述】:

我已将设计设置为与omniauth 和。这是 devise.rb 的样子:

...
  config.omniauth :facebook, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET, :scope => FACEBOOK_APP_PERMISSIONS
  config.omniauth :openid, OpenID::Store::Filesystem.new('./tmp'), :name => 'yahoo', :identifier => 'yahoo.com'
  config.omniauth :openid, OpenID::Store::Filesystem.new('./tmp'), :name => 'gmail', :identifier => 'https://www.google.com/accounts/o8/id'
...

我想将现有帐户与上述 3 链接,使用回调控制器中的以下代码:

...
  def callback(provider)
    if utilizator_signed_in?
      # link it's account
      if Login.link_omniauth(current_utilizator, omniauth_data)
        flash[:notice] = I18n.t "devise.omniauth_callbacks.link.success", :kind => provider
        redirect_to :root
      end
    else
      utilizator = Login.auth_with_omniauth(omniauth_data)

      if !utilizator.nil?
        flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => provider
        sign_in_and_redirect utilizator, :event => :authentication
      else
        utilizator = Login.register_omniauth(omniauth_data)
        flash[:notice] = I18n.t "devise.omniauth_callbacks.register.success", :kind => provider
        sign_in_and_redirect utilizator, :event => :authentication
      end
    end
  end
...

它适用于 facebook,但对于 google 和 yahoo,当前用户已注销并创建了一个新用户。

如何跳过用户注销阶段?

谢谢,

编辑: 我正在使用最新版本 3.0.rc3。 Login 中的函数很容易猜到: link_omniauth - 将当前登录的用户链接到一个帐户 auth_with_omniauth - 将验证用户 register_omniauth - 将注册一个新用户

这里的问题是utilizator_signed_in? (user_signed_in?) 将在用户登录时为 google 返回 false,我认为之前的 sign_out 发生在 facebook 上没有发生。

【问题讨论】:

  • 您使用的是哪个版本的omniauth?也许您应该显示您在登录模型中使用的函数的输出?

标签: ruby-on-rails devise omniauth


【解决方案1】:

我强烈推荐这个教程:here(比 rails casts 和其他关于该主题的教程更深入)。特别是,它有一个全面的 200 行代码 (services_controller.rb) 来创建您需要使用 Omniauth 有效处理任何身份验证服务 (Twitter/Facebook/Google/Github) 的控制器,并将其链接到 pre-现有的设计帐户,或创建新帐户。

我有一个(几乎)实时项目正在运行 here - 您可以使用Facebook/Twitter登录(我暂时没有启用google/github),如果您登录后进入Profile->Services,它会显示与您的帐户关联的多个认证服务。

我不愿意上传我的项目的源代码,因为它有很多与此无关的其他代码,但如果你真的觉得需要它,请告诉我。

【讨论】:

    【解决方案2】:

    所以我终于找到了我的问题的答案。 这个人https://github.com/intridea/omniauth/issues/185 也有同样的问题。

    感谢您的回复,

    【讨论】:

      【解决方案3】:

      我希望已经将我的个人资料任务的 gmail 地址链接提交到我的应用程序中

      【讨论】:

        猜你喜欢
        • 2018-03-14
        • 1970-01-01
        • 2020-12-29
        • 1970-01-01
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 2018-11-25
        相关资源
        最近更新 更多