Я предполагаю, что у вас OmniAuth работает в целом, и вам интересно только, как это сделать в новом окне. Если вы еще не настроили OmniAuth, есть отличный RailsCast об этом здесь .
У OmniAuth не должно быть проблем с работой во всплывающем окне. Для начала просто включите target='_blank'
на странице входа в систему, например:
<%= link_to "Log in with Facebook", "/auth/facebook", :target => '_blank' %>
Это должно загрузить страницу авторизации Facebook в новом окне, и вы сможете пройти через весь процесс OAuth. Однако, как только вы закончили работу с OAuth, вам нужно будет отобразить шаблон, включающий некоторый javascript для обработки закрытия страницы. Вот образец, которому мы следуем:
<script language='javascript'>
if (opener.authenticationSuccessful) {
opener.authenticationSuccessful();
} else {
opener.location.href = "<%= root_path %>"; // your 'login path'
}
window.close();
</script>
Это хорошо работает для нас, поскольку позволяет переопределить поведение по умолчанию (перейти на корневую страницу входа в систему) на постраничной основе (например, если кто-то только добавляет аутентификацию в существующий сеанс), но по умолчанию будет делать то, что вы ожидаете, без какой-либо дополнительной работы.