【发布时间】: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