【问题标题】:Facebook doesn't logout completely-iosFacebook 没有完全注销-ios
【发布时间】:2015-08-18 05:47:14
【问题描述】:

当我试图将 fbsdk(facebook) 集成到我的应用程序中时,它的登录会话运行良好。但是当我从 mp 应用程序注销时,它确实显示注销actionsheet,我可以轻松注销它。但是当我尝试再次登录 facebook,它会直接进入 facebook 确认页面,而不是进入登录页面详细信息。希望您的帮助。

我用于注销的代码。

  FBSDKLoginManager *manager = [[FBSDKLoginManager alloc] init];
            [FBSDKAccessToken setCurrentAccessToken:nil];
            [FBSession.activeSession closeAndClearTokenInformation];

            NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
            for(NSHTTPCookie *cookie in [storage cookies])
            {
                NSString *domainName = [cookie domain];
                NSRange domainRange = [domainName rangeOfString:@"facebook"];
                if(domainRange.length > 0)
                {
                    [storage deleteCookie:cookie];
                }
            }
            [manager logOut];

【问题讨论】:

  • 这是因为当您在客户端注销您的应用程序时,在应用程序中,您实际上并没有删除该用户对您的应用程序的 facebook 权限
  • 我会显示代码,一秒
  • @KiritModi:我需要客观 -c 解决方案。
  • @AbdulNouzil Objective C 解决方案:- FBSDKGraphRequest *deleteRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions/" 参数:nil HTTPMethod:@"DELETE"]; [deleteRequest startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (!error) NSLog(@"deleted"); }];

标签: ios objective-c logout facebook-sdk-3.14.x


【解决方案1】:

这不会发生,因为 facebook 登录是通过 Safari 或 facebook 应用程序完成的(如果 facebook 应用程序安装在您的手机中并且您已将其添加到设置帐户中)。

这是因为,Safari 拥有 facebook 会话并将其保存为 cookie。如果是 Facebook 应用程序,如果它连接到设置帐户,它将继续保持会话,直到您手动注销。 如果已经登录,则从 safari 或 facebook 应用程序手动注销或清除 safari 的 cookie 是从 facebook 注销的唯一方法。

【讨论】:

    【解决方案2】:

    如果你想撤销所有权限,那么你必须这样做:

    [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions" parameters:nil 
        HTTPMethod:@"DELETE"] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
      // ...
    }];
    

    https://developers.facebook.com/docs/facebook-login/permissions/v2.4

    但是,即使这并不能真正保证您的应用程序将从通过 Facebook 访问用户的权限中删除,同样,您所做的基本上是通过 facebook 注销停用活动令牌,但您并没有删除权限此用户通过 facebook。

    如果您真的想删除用户,或者用户想从他们的 Facebook 帐户中删除您的应用程序,这有点糟糕,但除非用户自己手动删除其 Facebook 帐户中的权限,否则您可以这样做,这就是脸书不得不说:

    撤销登录

    您还可以通过调用此 Graph API 端点让人们完全取消对应用的授权或撤销登录:

    DELETE /{user-id}/permissions
    

    必须使用有效的用户访问令牌或当前应用的应用访问令牌发出此请求。如果请求成功,您的 app 收到 true 的响应。如果调用成功,任何用户 该人的访问令牌将失效,他们将不得不 再次登录。因为您正在取消对您的应用的授权,他们也会 必须授予对您的应用程序的访问权限,就好像他们正在登录 第一次。

    【讨论】:

    • 你必须使用Facebook SDK for ios,看起来你已经在使用它了,对吧?
    • s.. 'Facebook-iOS-SDK', '3.14.1'
    • @ Larcerax,当我尝试调用时...收到响应...错误域=NSURLErrorDomain 代码=-1002“不支持的 URL”UserInfo=0x7f862293a1c0 {NSUnderlyingError=0x7f8624f5cc40“不支持的 URL”,NSErrorFailingURLStringKey= (null)?format=json&include_headers=false&sdk=ios, NSErrorFailingURLKey=(null)?format=json&include_headers=false&sdk=ios, NSLocalizedDescription=不支持的 URL}
    • 啊,阿卜杜勒,这就是为什么,你使用的是 3.14.1
    • 这是 4.5+ 你应该更新你的 facebook SDK 我想!
    【解决方案3】:

    我已将此作为错误和安全问题报告给 Facebook(您注销某些内容,然后您可以稍后登录而无需再次使用密码...)。

    他们回答说这不是错误,而是一个功能。 “按设计”。

    退出的唯一方法似乎是从电话中调用一个 url: https://m.facebook.com/logout.php?h=[a 16 字符长的类似令牌的字符串]&t=[10 char long number]&refid=[a number]

    由此看来,“h”属性似乎是强制性的。如果您忽略其他所有内容,它仍然有效。但是有一个问题:我不知道这个字符串是什么。有任何想法吗?

    或者其他方式退出?

    【讨论】:

      【解决方案4】:

      使用这个... [FBSDKProfile enableUpdatesOnAccessTokenChange:YES];

      【讨论】:

      • 您还需要从 safari 或您登录的浏览器中退出
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 2011-05-19
      • 2015-08-30
      • 1970-01-01
      • 2023-03-15
      • 2012-01-27
      • 1970-01-01
      相关资源
      最近更新 更多