Я настроил устройство для работы с 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 текущий пользователь вышел из системы и создан новый пользователь.
Как я могу пропустить фазу выхода пользователя?
Спасибо,
Edit:
Я использую последнюю версию 3.0.rc3.
Функции из Login легко угадать:
link_omniauth - свяжет текущего зарегистрированного пользователя с учетной записью
auth_with_omniauth - авторизует пользователя
register_omniauth - зарегистрирует нового пользователя
Проблема здесь в том, что utilizator_signed_in? (user_signed_in?) вернет false для Google, когда пользователь вошел в систему, я думаю, что произошел предыдущий выход из системы, который не происходит для Facebook.