Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计Omniauth,如何链接google帐户_Ruby On Rails_Devise_Omniauth - Fatal编程技术网

Ruby on rails 设计Omniauth,如何链接google帐户

Ruby on rails 设计Omniauth,如何链接google帐户,ruby-on-rails,devise,omniauth,Ruby On Rails,Devise,Omniauth,我已经建立了Desive与omniauth和。这就是designe.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

我已经建立了Desive与omniauth和。这就是designe.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上运行得非常好,但对于谷歌和雅虎来说,当前用户已经注销,新用户已经创建

如何跳过用户注销阶段

谢谢,

编辑: 我使用的是最新版本3.0.rc3。 登录的功能很容易猜测: link_omniauth-将当前登录的用户链接到一个帐户 auth_with_omniauth-将对用户进行身份验证 register\u omniauth-将注册新用户


这里的问题是效用者登录了?(用户登录?)当用户登录时,google会返回false,我认为facebook不会出现之前的注销情况。

我强烈推荐本教程:(比rails Cast和其他相关教程更深入)。特别是,它有一个完整的200行代码(
services\u controller.rb
)来创建控制器,您需要使用Omniauth高效地处理任何身份验证服务(Twitter/Facebook/Google/Github),并将其链接到预先存在的Desive帐户,或创建新帐户

我有一个(几乎)正在运行的项目- 您可以使用Facebook/Twitter登录(我现在还没有启用google/github),如果您在登录后进入Profile->Services,它将显示链接到您帐户的多个身份验证服务


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

所以我终于找到了我问题的答案。 这家伙也有同样的问题


感谢您的回复,

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

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