Используя тот же адрес электронной почты, чтобы войти в приложение 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
конец