2012-09-06 34 views
8

Tengo unas pocas preguntas acerca de la nueva reautorización FBSession (reauthorizeWithPermissions: comportamiento: completionHandler :) en Facebook SDK 3.0:Facebook SDK de iOS 3.0 Re-Autorización

Una vez que alguien ha accedido a través de facebook en mi aplicación, en ciertas páginas Me gustaría volver a autenticar al usuario con sus credenciales de Facebook. Esto es para garantizar que la persona que está viendo la página y la persona que inició sesión registraron, son iguales. Los permisos para re-auth siguen siendo los mismos que para iniciar sesión. Todo lo que necesito es una nueva confirmación de la contraseña del usuario para garantizar este caso.

Por lo tanto, estoy usando la reautorización con Permissions: para hacer esto. Y estoy configurando el comportamiento como FBSessionLoginBehaviorForcingWebView para garantizar que el usuario se vea obligado a ingresar sus credenciales. Sin embargo, esto no funciona en absoluto. Simplemente aparece una vista web en blanco durante un par de segundos y luego desaparece ... En este punto, llama al bloque FBSesstionStateHandler con el estado establecido en FBSessionStateOpen; sin embargo, no puede llamar al FBSessionReauthorizeResultHandler definido en (completionHandler :).

Sin embargo, si simplemente establezco el comportamiento predeterminado (FBSessionLoginBehaviorWithFallbackToWebView) funciona bien al pasar la solicitud de ida y vuelta entre la aplicación de Facebook/safari y completa la llamada al ejecutar el comando completion correctamente. Sin embargo, con el comportamiento predeterminado no obliga al usuario a volver a ingresar su contraseña.

Así que estoy muy confundido, y los documentos SDK en la web no son muy útiles para mi caso. ¿Podría alguien por favor avisarme sobre lo que estoy haciendo mal ... o si el clima es un error conocido en el SDK? Si es así, ¿cómo puedo cumplir con mis requisitos?

-(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]]; 
} 

} 

Además, una vez que la vista web reauth aparece correctamente, ¿Cómo me aseguro de que el correo electrónico del usuario es rellena automáticamente y bloquear el formulario de usuario cambiarlo? ¿Puedo acceder a la vista web dentro de facebook sdk para establecer estas propiedades?

Finalmente, ¿qué ocurre con el token de acceso y la fecha de caducidad si la re-auth se lleva a cabo con los mismos permisos que el inicio de sesión?

Gracias de antemano,

+0

Me pregunto lo mismo; parece que en sdk 3.1 el método reauthorizeWithPermissions: behavior: completionHandler: también está en desuso. estoy – Kevlar

Respuesta

0

Esta es una pregunta interesante. No lo he codificado, así que no sé si funcionará, pero teniendo en cuenta cómo funcionan las sesiones de FB, esta es mi mejor aproximación.

Usando una sesión de FB, no creo que puedas hacer esto. Dentro de una sesión determinada, FB auth es binario, o el usuario ha iniciado sesión (es decir, tiene una sesión abierta) o no. Los diversos métodos de reautorización estaban destinados a autorizar con permisos adicionales y ahora están en desuso en favor de los métodos para solicitar permisos adicionales.

Es posible que pueda lograr algo cerca de lo que desea al admitir varias sesiones de FB. La autenticación secundaria sería básicamente lo mismo que permitir que un segundo usuario de FB inicie sesión en su aplicación. Luego cerraría la segunda sesión en el momento apropiado. Podría hacer cumplir que ambas sesiones son el mismo usuario de FB al comparar los ID de usuario de FB.

En el último párrafo del documento Understanding Sessions, FB explica que admite varias sesiones.

Cuestiones relacionadas