2012-09-06 20 views
8

ho un paio di domande sul nuovo reauthorisation FBSession (reauthorizeWithPermissions: comportamento: completionHandler :) In Facebook SDK 3.0:Facebook iOS SDK 3.0 Re-Autorizzazione

Una volta che qualcuno si è connesso in via facebook sulla mia app, su alcune pagine mi piacerebbe ri-autenticare l'utente con le sue credenziali di Facebook. Questo per garantire che la persona che sta visualizzando la pagina e la persona che ha effettuato la registrazione siano uguali. Le autorizzazioni per re-auth rimangono le stesse di login. Tutto ciò di cui ho bisogno è una riconferma della password dell'utente per garantire questo caso.

Quindi sto usando reauthorisationWithPermissions: per fare ciò. E sto impostando il comportamento come FBSessionLoginBehaviorForcingWebView per garantire che l'utente sia costretto a inserire le sue credenziali. Tuttavia, questo non funziona affatto. Si apre semplicemente una webview vuota per un paio di secondi e poi scompare ... A questo punto, chiama il blocco FBSesstionStateHandler con lo stato impostato su FBSessionStateOpen, tuttavia, non riesce a chiamare FBSessionReauthorizeResultHandler definito all'interno di (completionHandler :).

Tuttavia, se si imposta semplicemente il comportamento su predefinito (FBSessionLoginBehaviorWithFallbackToWebView), funziona correttamente passando la richiesta avanti e indietro tra l'app di facebook/safari e completa la chiamata chiamando correttamente il completamentoHandler. Tuttavia, con il comportamento predefinito, non obbliga l'utente a reinserire la propria password.

Quindi sono davvero confuso, e i documenti sdk sul web non sono molto utili per il mio caso. Qualcuno potrebbe consigliarmi su cosa sto facendo male ... o superare un bug noto nell'SDK? In tal caso, come posso soddisfare le mie esigenze?

-(void) reauthThroughFacebook { 

if (!self.facebookSession.isOpen && self.facebookSession.state == FBSessionStateCreatedTokenLoaded) { 
    [self.facebookSession openWithBehavior: FBSessionLoginBehaviorWithNoFallbackToWebView 
         completionHandler: self.stateHandler]; 
} 

if (self.facebookSession.isOpen) { 
    [self.facebookSession reauthorizeWithPermissions: self.userPermissions 
              behavior: FBSessionLoginBehaviorForcingWebView 
            completionHandler:^(FBSession *session, NSError* error){ 
             if (self.facebookSession == session) { 
              [self completedReauthWithSuccess:(error == nil) error:error]; 
             } 
            }]; 
} else { 
    [self completedReauthWithSuccess:NO error:[NSError errorWithDomain: @"No active session found." 
                    code: FBErrorInvalid userInfo: nil]]; 
} 

} 

Inoltre, una volta che la visualizzazione Web reauth si apre correttamente, come faccio a garantire che l'indirizzo di posta elettronica dell'utente viene automaticamente popolato e bloccare il modulo utente cambiarlo? Posso accedere alla vista Web all'interno del sdk di Facebook per impostare queste proprietà?

Infine, cosa succede al token di accesso e alla data di scadenza se la re-auth avviene con le stesse autorizzazioni di login ??

Grazie in anticipo,

+0

Mi sto chiedendo la stessa cosa; sembra che in sdk 3.1 sia deprecato anche il metodo reauthorizeWithPermissions: behavior: completionHandler: sono – Kevlar

risposta

0

Questa è una domanda interessante. Non l'ho codificato quindi non so se funzionerà, ma visto come funzionano le sessioni di FB, questa è la mia ipotesi migliore per un approccio.

Utilizzando una sessione FB, non penso che sia possibile farlo. All'interno di una determinata sessione, l'autenticazione FB è binaria, o l'utente è loggato (cioè ha una sessione aperta) oppure no. I vari metodi di reauth avevano lo scopo di autorizzare autorizzazioni aggiuntive e ora sono deprecati a favore dei metodi per richiedere permessi aggiuntivi.

Potrebbe essere possibile realizzare qualcosa di simile a ciò che si desidera supportando più sessioni FB. L'autenticazione secondaria sarebbe fondamentalmente la stessa che consente a un secondo utente FB di accedere alla tua app. Dovresti quindi chiudere la seconda sessione al momento opportuno. È possibile applicare il fatto che entrambe le sessioni sono lo stesso utente FB confrontando gli ID utente FB.

Nell'ultimo paragrafo del documento Understanding Sessions, FB discute del supporto di più sessioni.

Problemi correlati