Используя тот же адрес электронной почты, чтобы войти в приложение Rails через Oauth и Sorcery

Я использую колдовство в моем приложении Rails. Аутентификация Oauth работает на сервисах Google и Github. Но если у пользователя есть одинаковые электронные письма для входа в Google и Github, мое приложение игнорирует другие попытки входа в систему, потому что использованная электронная почта уже сохранена в базе данных.

Итак, мне нужно многократный вход в мое приложение через Oauth, даже если электронные письма в разных сервисах одинаковы. Что я должен делать?

1 ответ

Вы можете сделать это так:

put it in ./app/controller/oauths_controller.rb

обратный вызов def

provider = auth_params[:provider]

if @user = login_from(provider)
  redirect_to root_path, :notice => "Logged in from #{provider.titleize}!"
else
  begin
    @user = create_from(provider)
    reset_session # protect from session fixation attack
    auto_login(@user)
    redirect_to root_path, :notice => "Logged in from #{provider.titleize}!"
  rescue
    provider_hash = sorcery_fetch_user_hash(provider)
    user_email = provider_hash[:user_info]['email']
    @user = User.find_by_email(user_email)
    @user.authentications.create!(:provider => provider, :uid => provider_hash[:uid])
    reset_session
    auto_login(@user)
    redirect_to root_path, :notice => "Logged in from #{provider.titleize}!"
  rescue
    redirect_to root_path, :alert => "Failed to login from #{provider.titleize}!"
  end
end

конец

Другие вопросы по тегам