Как заставить Omniauth работать с всплывающим окном? - PullRequest
3 голосов
/ 05 декабря 2010

Значение по умолчанию для Omniauth прекрасно работает, если вы открываете его в существующем окне, но не знаете, как оно работает во всплывающем контексте, и вы обрабатываете большую часть взаимодействий через javascript

Ответы [ 2 ]

15 голосов
/ 05 января 2011
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 на страницу, где должно быть обновлено родительское окно.

3 голосов
/ 06 декабря 2010

Похоже, вы могли бы сделать это сами?

Когда пользователь нажимает «Войти через Facebook» - используйте JS, чтобы открыть окно с местоположением / auth / facebook. «Обратный вызов» просто перенаправит обратно в / auth / callback в этом же окне. Когда вы закончите работу с обратным вызовом, закроете текущее окно и обновите родительский элемент?

...