2010-07-21 11 views
5

Sto costruendo un'applicazione canvas Facebook che carica in un iframe con Django. Vorrei che il processo di login funzionasse in modo simile a come lo fa Zynga. In questo metodo, se non si è connessi, si viene reindirizzati a una pagina di accesso di Facebook e quindi a una pagina di richiesta delle autorizzazioni per l'app (senza popup).Autenticazione nell'app Facebook Canvas utilizzando l'API New Graph

Per quanto posso dire Zynga deve utilizzare FBML e solo inoltro a URL che sembrano:

http://www.facebook.com/login.php?api_key=[api_key]&canvas=1&fbconnect=0&next=[return_url]

Esiste un modo per ottenere un effetto simile in un'applicazione python che carica in un iframe?

C'è un metodo here che mostra come ottenere i reindirizzamenti corrette utilizzando il nuovo SDK php, ma sto cercando di utilizzare il nuovo SDK pitone che ha solo il metodo:

def get_user_from_cookie(cookies, app_id, app_secret): 
""" 
Parses the cookie set by the official Facebook JavaScript SDK. 
cookies should be a dictionary-like object mapping cookie names to 
cookie values. 
... 
""" 

ho un po 'di lavoro codice che utilizza il Javascript SDK e il metodo get_user_from_cookie:

<div id="fb-root"> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 
</div> 

<script type="text/javascript"> 
FB.init({ apiKey: 'apikey', status: true, cookie: true, xfbml: true}); 

FB.Event.subscribe('auth.login', function(response) { 
    // Reload the application in the logged-in state 
    window.top.location = 'http://apps.facebook.com/myapp/'; 
}); 
</script> 
<fb:login-button>Install MyApp</fb:login-button> 

il problema di questo metodo è che richiede all'utente di fare clic su un pulsante per effettuare il login e poi lavorare attraverso le schermate di autenticazione a comparsa. (Nota: un popup si verifica anche se chiamo FB.login direttamente)

Quindi ... c'è un modo per utilizzare l'SDK javascript per reindirizzare la pagina di accesso anziché caricarla come popup?

Grazie per qualsiasi aiuto! --Eric

risposta

13

C'è un modo per utilizzare il JavaScript SDK per reindirizzare alla pagina di login piuttosto che caricarlo come popup?

No. L'SDK JavaScript aprirà una nuova finestra anziché reindirizzare la finestra corrente.

Per presentare all'utente una versione a schermo intero della finestra di dialogo di autorizzazione, è necessario reindirizzare a https://graph.facebook.com/oauth/authorize?client_id={{ application_id }}&redirect_uri={{ redirect_uri }}. Si noti che non è possibile farlo dal codice lato server, in quanto ciò reindirizza solo l'iframe e Facebook non lo consente. Avrai bisogno di un documento intermedio che reindirizzi la finestra genitore.

<!DOCTYPE html> 

<!-- 
This document redirects the parent window to the authorization 
dialog automatically, or falls back to a link if the client does not 
support JavaScript. 
--> 

<html> 
    <head> 
    <script type="text/javascript"> 
     window.parent.location = 'https://graph.facebook.com/oauth/authorize?client_id={{ application_id }}&redirect_uri={{ redirect_uri }}'; 
    </script> 
    </head> 

    <body> 
    You must <a target="_top" href="https://graph.facebook.com/oauth/authorize?client_id={{ application_id }}&redirect_uri={{ redirect_uri }}">authorize this application</a> in order to proceed. 
    </body> 
</html> 

Una volta che l'utente ha autorizzato l'applicazione, lui o lei sarà reindirizzato al URI specificato nel redirect_uri e Facebook sarà popolare il parametro GET signed_request con tutti i tipi di informazioni deliziosa (vedi the documentation on signed requests) che è possibile utilizzare per fare richieste a Facebook per conto dell'utente.

Si noti che se si intende salvare questa richiesta firmata (o qualsiasi altra cosa) in un cookie in un'applicazione canvas, è necessario impostare criteri P3P compatti nelle intestazioni; in caso contrario, tutte le versioni di Internet Explorer ignoreranno i cookie.

P3P: CP="IDC CURa ADMa OUR IND PHY ONL COM STA"

Ho scritto una libreria che rende veramente facile fare le applicazioni Facebook tela alimentati da Django, che si prende cura di tutte queste cose per voi. Si chiama Fandjango ed è disponibile su github.

+1

È possibile reindirizzarli alla pagina di autorizzazione utilizzando top.location in javascript – BeRecursive

+0

@BeRecursive: Sì. Questo è esattamente quello che sto dicendo. –

+0

Perché reindirizzare a una pagina che ha quel codice quando si codifica è sufficiente iniettarlo nella pagina? – BeRecursive

Problemi correlati