如何使用 Parse 和 Swift 从 Facebook 注销或撤销登录

How to Log out from Facebook or revoke login using Parse and Swift

我正在尝试让我的用户完全退出我的应用程序。使用时

PFUser.logout()

我成功将用户从 Parse 注销。 但是当我返回应用程序并点击登录按钮时,我被重定向到 Facebook 屏幕,上面写着:"You have already authorized [name of the app]" 所以我永远不能用另一个帐户再次登录,除非我重置模拟器。

我也尝试使用

注销
PFFacebookUtils.facebookLoginManager().logOut()

但是也没用... 希望你能帮我找到解决办法! 我正在使用最新的 Facebook 和 Parse SDK

更新:

实际使用 PFUser.logout() 和最新版本的 ParseFacebook iOS SDK 版本 >= 4.4.0 会做的。

不要使用 PFFacebookUtils.facebookLoginManager().logOut()FBSDKLoginManager().logOut(),因为它只会让用户从 Facebook 注销,而不会从 Parse 后端。这意味着它不会删除 Parse 后端上的可撤销会话。

来源:Logout from facebook in iOS app

- (void)logout:(id<FBSessionDelegate>)delegate {

  _sessionDelegate = delegate;

  NSMutableDictionary * params = [[NSMutableDictionary alloc] init];
  [self requestWithMethodName:@"auth.expireSession"
                    andParams:params andHttpMethod:@"GET"
                  andDelegate:nil];

  [params release];
  [_accessToken release];
  _accessToken = nil;
  [_expirationDate release];
  _expirationDate = nil;

  NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  NSArray* facebookCookies = [cookies cookiesForURL:
    [NSURL URLWithString:@"https://m.facebook.com"]];

  for (NSHTTPCookie* cookie in facebookCookies) {
    [cookies deleteCookie:cookie];
  }

  if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogout)]) {
    [_sessionDelegate fbDidLogout];
  }
}

我刚刚实现了这个。从应用程序中的任何 viewController 调用此函数,它将从 facebook 注销。对我来说就像一个魅力。希望对你有帮助。

-(void) logout
{
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];

    if ( [FBSDKAccessToken currentAccessToken] ){
        [login logOut];
    }
}

实际上撤销登录(让人们完全取消对应用程序的授权,或撤销登录)和退出之间是有区别的来自 his/her 个 Facebook 帐户的用户:

撤销登录

(可以查看Facebook documentation)

您还可以通过调用此 Graph API 端点:

让人们完全取消对应用程序的授权或撤销登录
DELETE /{user-id}/permissions

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

let facebookRequest: FBSDKGraphRequest! = FBSDKGraphRequest(graphPath: "/me/permissions", parameters: nil, HTTPMethod: "DELETE")

facebookRequest.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection!, result: AnyObject!, error: NSError!) -> Void in

                if(error == nil && result != nil){
                    println("Permission successfully revoked. This app will no longer post to Facebook on your behalf.")
                    println("result = \(result)")
                } else {
                    if let error: NSError = error {
                        if let errorString = error.userInfo?["error"] as? String {
                            println("errorString variable equals: \(errorString)")
                        }
                    } else {
                        println("No value for error key")
                    }
                }
}

注销用户表单his/her Facebook 帐户

如果您使用过ParseFacebook iOS SDK版本>=4.4.0注册或登录通过 Facebook 在用户中,并且您不想取消对应用程序的授权或撤销登录,而只想从 Facebook 注销用户,那么请改用:

PFUser.logOut()

它将注销用户,删除 Parse 后端的会话(不要忘记通过您的 Parse 应用程序设置 enable Parse revocable session),加上它还将删除写入用户设备磁盘上的 Facebook 会话。

希望这个回答对大家有所帮助