La valeur par défaut pour Omniauth fonctionne à merveille si vous l'ouvrez dans la fenêtre existante, mais vous ne savez pas comment cela fonctionne dans un contexte contextuel et vous gérez une grande partie des interactions via javascriptComment faire fonctionner Omniauth avec une fenêtre contextuelle?
Répondre
Semble que vous pourriez faire c'est toi? Lorsque l'utilisateur clique sur 'login via facebook' - utilisez JS pour ouvrir une fenêtre avec l'emplacement de/auth/facebook. Le 'callback' retournera simplement à/auth/callback dans cette même fenêtre. Une fois que vous avez terminé votre travail avec le rappel, fermez la fenêtre en cours et actualisez le parent?
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;
}
Remplacer provider_url par '/ auth/facebook' ou '/ auth/twitter' devrait fonctionner.
A votre URL de rappel,
<script type="text/javascript">
window.opener.location = '<%= @redirect_to %>';
window.close();
</script>
Vous pouvez actualiser la page mais que vous voulez avec @redirect_to pointant vers la page où se trouve votre fenêtre parent doit être rafraîchi à.
c'était presque exactement comment je l'ai fait à la fin. Merci! = D –
altho i déclenché l'appel js du contrôleur rendu: text => "",: type => 'html' –
il sera plus rapide si vous rendez avec: layout => false – siong1987
merci cory! est/auth/callback une fonction générique qui gère les différents réseaux? –
eu le travail, merci! = D –