我对 facebook sdk 3.0 中的新 FBSession 重新授权(reauthorizeWithPermissions: behavior: completionHandler:) 有一些疑问:
一旦有人在我的应用程序上通过 facebook 登录,在某些页面上,我想使用他/她的 facebook 凭据重新验证用户。这是为了确保查看页面的人和首字母登录的人是相同的。重新授权的权限与登录相同。我需要的是重新确认用户密码以确保这种情况。
因此我使用 reauthorisationWithPermissions: 来做到这一点。我将行为设置为 FBSessionLoginBehaviorForcingWebView 以确保用户被迫输入他/她的凭据。但是,这根本不起作用。它只是弹出一个空白的 webview 几秒钟然后消失......此时,它调用状态设置为 FBSessionStateOpen 的 FBSesstionStateHandler 块,但是,无法调用 (completionHandler:) 中定义的 FBSessionReauthorizeResultHandler。
但是,如果我只是将行为设置为默认值(FBSessionLoginBehaviorWithFallbackToWebView),它可以通过在 facebook app/safari 之间来回传递请求并通过正确调用 completionHandler 来完成调用。但是,默认行为不会强制用户重新输入他/她的密码。
所以我真的很困惑,网络上的 sdk 文档对我的情况并不是很有用。有人可以告诉我我做错了什么......或者它是SDK中的一个已知错误?如果是这样,我该如何满足我的要求?
-(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]];
}
}
此外,一旦 reauth web 视图正确弹出,我如何确保自动填充用户的电子邮件地址并阻止用户表单更改它?我可以访问 facebook sdk 中的 Web 视图来设置这些属性吗?
最后,如果使用与登录相同的权限进行重新身份验证,访问令牌和到期日期会发生什么变化?
先感谢您,