调用 facebook ios sdk 的注销功能未清除用户凭据
Posted
技术标签:
【中文标题】调用 facebook ios sdk 的注销功能未清除用户凭据【英文标题】:Calling logout function of facebook ios sdk is not clearing user Credentials 【发布时间】:2011-08-29 10:04:13 【问题描述】:在实现facebook SSO时,调用facebook ios sdk的注销功能不会清除用户凭据,并且不会要求下次登录。
【问题讨论】:
您指的是 OAuth 和外部移动 safari 开放吗? 是的,在 developer.facebook.com 中给出 【参考方案1】:我使用了 Graph Api.....
- (IBAction)loginButtonPressed:(id)sender
NSString *client_id = @"dsfgdgfgfgdfgvdfg";
//alloc and initalize our FbGraph instance
self.fbGraph = [[FbGraph alloc] initWithFbClientID:client_id];
//begin the authentication process.....
[fbGraph authenticateUserWithCallbackObject:self andSelector:@selector(fbGraphCallback:)
andExtendedPermissions:@"user_photos,user_videos,publish_stream,offline_access,user_checkins,friends_checkins"];
- (void)logOutButtonPressed
NSLog(@"logout");
fbGraph.accessToken = nil;
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
NSString* domainName = [cookie domain];
NSRange domainRange = [domainName rangeOfString:@"facebook"];
if(domainRange.length > 0)
[storage deleteCookie:cookie];
[self loginButtonPressed:nil];
这段代码运行良好..试试这个
【讨论】:
@Pallavi 这真的会删除移动 safari 中的 cookie 吗?我以前看过这段代码并调试了一下,但无济于事。 我没有使用移动 safari,登录是 web 视图,我给出了注销按钮。 @Pallavi 我认为这行得通,但是如果您使用其中一个 Facebook 库,它将启动移动 safari,这是一种让用户登录的更信任的方式:该应用程序无权访问凭据,您可以在 webView 中访问这些凭据。 link我用过这个 这在我注销然后再次点击登录按钮时有效,但是当我在注销后退出应用程序并再次打开应用程序并点击登录按钮时无效。这让我发疯同时。【参考方案2】:我也有同样的经历,但我认为这不是一个错误,虽然令人困惑。
Facebook 在移动 Safari 中放置一个 cookie,该 cookie 指的是有效会话或访问令牌。如果您使用 Facebook 库注销,它会清除访问令牌和不在移动 safari 中使用的 webview 的所有 cookie。实际上你不能通过代码来做到这一点。现在,如果您返回并打开移动 Safari,则仍然存在有效会话,您无需输入凭据即可再次登录。
您可以提交一个错误,询问 Facebook 是否可以使访问令牌服务器端无效。
【讨论】:
以上是关于调用 facebook ios sdk 的注销功能未清除用户凭据的主要内容,如果未能解决你的问题,请参考以下文章