2010-12-05 37 views

Répondre

3

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?

+0

merci cory! est/auth/callback une fonction générique qui gère les différents réseaux? –

+0

eu le travail, merci! = D –

15
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 à.

+0

c'était presque exactement comment je l'ai fait à la fin. Merci! = D –

+0

altho i déclenché l'appel js du contrôleur rendu: text => "",: type => 'html' –

+0

il sera plus rapide si vous rendez avec: layout => false – siong1987