我有一些关于新的FBSession重新授权的问题(在facebook sdk 3.0中重新授权使用:行为:completionHandler :):
有人在我的应用程序上通过Facebook登录后,在某些页面上,我想用他/她的facebook凭据重新验证用户身份。这是为了确保正在查看页面的人和初始化登录的人是相同的。 re-auth的权限与登录保持一致。我需要的是重新确认用户的密码以确保这种情况。
因此我使用reauthorisationWithPermissions:这样做。我将行为设置为FBSessionLoginBehaviorForcingWebView,以确保用户被迫输入他/她的凭据。但是,这根本不起作用。它只是弹出一个空白的webview几秒钟然后消失......此时,它调用FBSesstionStateHandler块,状态设置为FBSessionStateOpen,但是,无法调用(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网页视图,我该如何确保自动填充用户的电子邮件地址并阻止更改用户表单?我可以访问facebook sdk中的Web视图来设置这些属性吗?
最后,如果使用与登录相同的权限进行重新验证,访问令牌和失效日期会发生什么?
提前谢谢你,
答案 0 :(得分:0)
这是一个有趣的问题。我没有编码,所以我不知道这是否有效,但考虑到FB会话如何工作,这是我对方法的最佳猜测。
使用一个FB会话,我认为你不能这样做。在给定的会话中,FB auth是二进制的,用户是否登录(即具有打开的会话)。各种reauth方法旨在使用其他权限进行身份验证,现在已弃用,以支持请求其他权限的方法。
您可以通过支持多个FB会话来完成您想要的任务。辅助身份验证与允许第二个FB用户登录您的应用程序基本相同。然后,您将在适当的时间关闭第二个会话。您可以通过比较FB用户ID来强制两个会话都是相同的FB用户。
在Understanding Sessions doc的最后一段中,FB讨论了支持多个会话。