Ios 解析:Facebook用户取消链接并再次登录将创建两个用户表条目

Ios 解析:Facebook用户取消链接并再次登录将创建两个用户表条目,ios,swift,parse-platform,Ios,Swift,Parse Platform,我看到我通过Facebook代码解析登录时是这样的 PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { (user: PFUser?, error: NSError?) -> Void in if let user = user { if user.isNew { println("User signed up and

我看到我通过Facebook代码解析登录时是这样的

PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) {
        (user: PFUser?, error: NSError?) -> Void in
        if let user = user {
            if user.isNew {
                println("User signed up and logged in through Facebook!")
                let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
                graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

                    if ((error) != nil)
                    {
                        println("Error: \(error)")
                    }
                    else
                    {
                        let userEmail : NSString = result.valueForKey("email") as! NSString
                        println("User Email is: \(userEmail)")
                        user["email"] = userEmail
                    }
                })
            } else {
                println("User logged in through Facebook!")
            }
        } else {
            println("Uh oh. The user cancelled the Facebook login.")
        }
    }
注销方法如下所示

PFFacebookUtils.unlinkUserInBackground(PFUser.currentUser()!) { (succeeded: Bool, error: NSError?) -> Void in
        if succeeded {
            FBSDKAccessToken.setCurrentAccessToken(nil)
            FBSDKProfile.setCurrentProfile(nil)
            PFUser.logOut()
        } else {
            println("Error")
        }
    }
当用户第一次登录时,我看到解析在用户表中创建了一行,authData指向Facebook。注销后,此authData将被擦除

问题是当用户再次登录时,parse会创建另一行并将authData链接到Facebook,是否有办法避免这种情况。我想使用之前创建的同一行并链接到Facebook登录,而不是每次用户注销并登录时创建多行


我可以检查电子邮件是否已经存在,但为此,我需要用户再次登录的电子邮件,并且在这种情况下,已经创建了一个新行。

您需要将用户链接到facebook帐户,下面的代码为您执行此链接:

if !PFFacebookUtils.isLinkedWithUser(user) {
  PFFacebookUtils.linkUserInBackground(user, withReadPermissions: nil, {
    (succeeded: Bool?, error: NSError?) -> Void in
    if succeeded {
      println("Woohoo, the user is linked with Facebook!")
    }
  })
}

链接时发生的步骤与登录非常相似。这个 不同之处在于,成功登录后,将更新现有的PFUser 使用Facebook信息。未来通过Facebook登录的用户现在将登录 在用户的现有帐户中


没错,同一个页面也告诉我们——我们的SDK接收用户的Facebook访问数据并将其保存给一个用户。如果不存在具有相同Facebook ID的PFUser,则会创建一个新的PFUser。这解释了为什么在我的案例中创建新行。@sysuser就是这样,我很高兴你得到了它,祝你的应用好运!谢谢,文档让它变得简单了。我把这个
isLinkedWithUser
code称为哪里?另外,我是否同时调用该函数和
loginInBackground
。因为对于此调用
FFacebookUtils.linkUserInBackground(user,withReadPermissions:nil,{
您需要传入
user
对象,此时,新的用户条目已经在Parse中的user表中创建。我看不出这是如何解决问题的。您解决了这个问题吗?