设计Omniauth,如何链接谷歌帐户

时间:2011-09-15 14:35:12

标签: ruby-on-rails devise omniauth

我已经设定了与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,但对于谷歌和雅虎,当前用户已退出并创建了新用户。

如何跳过用户sign_out阶段?

谢谢,

编辑:  我使用的是最新版本3.0.rc3。  Login中的功能很容易猜到:  link_omniauth - 将当前登录的用户链接到一个帐户  auth_with_omniauth - 将授权用户  register_omniauth - 将注册一个新用户

这里的问题是utilizator_signed_in?当用户登录时,(user_signed_in?)将为谷歌返回false,我认为有一个先前的sign_out正在发生,这对于facebook来说并不会发生。

3 个答案:

答案 0 :(得分:3)

我强烈推荐本教程:here(远远超过关于该主题的rails演员和其他教程)。特别是,它有一个全面的200行代码(services_controller.rb)来创建控制器,您需要使用Omniauth有效地处理任何身份验证服务(Twitter / Facebook / Google / Github),并将其链接到预先存在的Devise帐户,或创建新帐户。

我有一个(几乎)实时项目与here一起运行 - 您可以使用Facebook / Twitter登录(我目前尚未启用google / github),如果您在登录后转到Profile->服务,它将显示链接到您帐户的多个身份验证服务。

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

答案 1 :(得分:2)

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

感谢您的回复,

答案 2 :(得分:0)

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