Как сделать Omniauth работать с всплывающим окном?
-
08-10-2019 - |
Вопрос
По умолчанию для Omniauth красиво работает, если вы открываете его в существующем окне, но не уверены, как он работает в всплывающем контексте, и вы обрабатываете большую часть взаимодействия через JavaScript
Решение
Похоже, вы можете сделать это собой?
Когда пользователь нажимает «Войти через Facebook» - используйте JS для POP открыть окно с расположением / auth / facebook. «Callback» будет просто настроен обратно в / auth / callback в этом же окне. Как только вы сделали свою работу с обратным вызовом, закройте текущее окно и обновите родителя?
Другие советы
var newwindow;
function login(provider_url, width, height) {
var screenX = typeof window.screenX != 'undefined' ? window.screenX : window.screenLeft,
screenY = typeof window.screenY != 'undefined' ? window.screenY : window.screenTop,
outerWidth = typeof window.outerWidth != 'undefined' ? window.outerWidth : document.body.clientWidth,
outerHeight = typeof window.outerHeight != 'undefined' ? window.outerHeight : (document.body.clientHeight - 22),
left = parseInt(screenX + ((outerWidth - width) / 2), 10),
top = parseInt(screenY + ((outerHeight - height) / 2.5), 10),
features = ('width=' + width + ',height=' + height + ',left=' + left + ',top=' + top);
newwindow = window.open(provider_url, 'Login', features);
if (window.focus)
newwindow.focus();
return false;
}
Замените Provider_url с помощью «/ auth / facebook» или '/ auth / twitter'.
У вашего обратного вызова URL,
<script type="text/javascript">
window.opener.location = '<%= @redirect_to %>';
window.close();
</script>
Вы можете обновить страницу, однако, что вы хотите с @redirect_to указывать на страницу, где следует обновить ваше родительское окно.