首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PFFacebookUtils。如何区分登录和注册?

PFFacebookUtils。如何区分登录和注册?
EN

Stack Overflow用户
提问于 2016-03-27 11:11:46
回答 1查看 157关注 0票数 0

我试图在我的应用程序中提供一些非常简单(正如我所想的那样)的功能,它使用Parse.com服务。我需要的只是允许用户通过Facebook创建一个帐户,然后再通过Facebook登录。

问题是PFFacebookUtils登录方法不仅通过Facebook登录用户,而且还创建了一个新的PFUser。为什么对我来说是个问题?好吧,当然。我可以区分注册和加入isNew字段,但这并没有真正的帮助。

考虑一下-用户尝试通过Facebook登录(他还没有PFUser ),他登录,一个新的用户被创建。我看到用户是新的(即用户以前没有注册),我不得不拒绝这个登录。好吧,我拒绝他,我说“你还没有注册,去报名吧”。用户注册(通过相同的登录方法),这一次返回相同的PFUser,这是用户尝试登录时创建的。我看到用户不是新的,它已经注册了,因此我不得不再次拒绝用户,因为帐户已经存在,并且不可能再次创建相同的帐户。

你明白这个问题了吗?我是不是不知道如何处理PFFacebookUtils帐户的创建和登录,还是PFFacebookUtils提供了一个愚蠢的API?你们是怎么做到的?你怎么解决我描述的问题。真的,这一定很简单,但我在任何地方都找不到好的例子

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-27 15:14:58

我有登录和注册代码的迅速检查,看看一个用户是否是新的登录和注册。这是我的代码:

登录

代码语言:javascript
复制
let spinningActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
    spinningActivity.label.text = "Just a Moment"
    spinningActivity.detailsLabel.text = "Logging in"

    if reachabilityStatus == kNOTREACHABLE {

        spinningActivity.hideAnimated(true)

        self.displayError("No Internet Connection", message: "Please connect to the internet before continuing")

    } else {

        let permissions = ["public_profile"]

        PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { (user:PFUser?, error:NSError?) -> Void in



            if error != nil {

                spinningActivity.hideAnimated(true)

                self.displayError("Error", message: error!.localizedDescription)

            } else if let user = user {
                if user.isNew {

                    spinningActivity.hideAnimated(true)

                    PFUser.currentUser()?.deleteInBackground()

                    self.displayNoticeWithTwoActions("Account Not Found", message: "This Facebook account is not in our system. You have to sign up first.", firstButtonTitle: "Sign Up",closeButtonTitle: "Ok", segue: "dontHaveAccountSegue")

                } else {

                    spinningActivity.hideAnimated(true)

                    self.performSegueWithIdentifier("successfulLoginSegue", sender: self)



                }
            } else {

                PFUser.currentUser()?.deleteInBackground()

                spinningActivity.hideAnimated(true)

                self.displayError("Error", message: "Unless you tapped on 'Cancel' or 'Done', something went wrong. Please try again.")

            }

        }

    }

注册

我有一个注册按钮,然后一个函数实现到名为"loadFacebookUserDetails“的登录按钮中。

代码语言:javascript
复制
let spinningActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
    spinningActivity.label.text = "Just a Moment"
    spinningActivity.detailsLabel.text = "Loading Details"


    if reachabilityStatus == kNOTREACHABLE {

        spinningActivity.hideAnimated(true)

       self.displayError("No Internet Connection", message: "Please connect to the internet before continuing")

    } else {

        let permissions = ["public_profile", "email"]

        PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { (user:PFUser?, error:NSError?) -> Void in

            if let user = user {

                if !user.isNew {

                    spinningActivity.hideAnimated(true)

                    PFUser.logOut()


                    self.displayNoticeWithTwoActions("Account Found", message: "This Facebook account already in our system. You have to log in first.", firstButtonTitle: "Log In", closeButtonTitle: "Cancel", segue: "haveAccountSegue")



                } else if error != nil {

                    spinningActivity.hideAnimated(true)

                    self.displayError("Error", message: error!.localizedDescription)



                } else if error == nil {

                    spinningActivity.hideAnimated(true)

                    self.loadFacebookUserDetails()

                }

            }

       else {

                spinningActivity.hideAnimated(true)

                self.displayError("Something Went Wrong", message: "Unless you tapped on 'Cancel' or 'Done', something went wrong. Please try again")

            }



        }


    }
代码语言:javascript
复制
func loadFacebookUserDetails() {

    let spinningActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
    spinningActivity.mode = MBProgressHUDMode.AnnularDeterminate
    spinningActivity.label.text = "Just a Moment"
    spinningActivity.detailsLabel.text = "Loading Details"

    let requestPerameters = ["fields": "id, email, first_name, last_name, name"]

    let userDetails = FBSDKGraphRequest(graphPath: "me", parameters: requestPerameters)

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

        if error != nil {

            spinningActivity.hideAnimated(true)

            self.displayError("Error", message: error!.localizedDescription)

            PFUser.logOut()

        } else {

        let userID:String = result["id"] as! String
        let userEmail:String = result["email"] as! String
        let userFirstName:String = result["first_name"] as! String
        let userLastName:String = result["last_name"] as! String


        // Get Facebook Profile Picture

        let userProfile = "https://graph.facebook.com/" + userID + "/picture?type=large"

        let usernameLink = "https://graph.facebook.com/" + userID

        let username = usernameLink.stringByReplacingOccurrencesOfString("https://graph.facebook.com/", withString: "")

        let profilePictureUrl = NSURL(string: userProfile)

        let profilePictureData = NSData(contentsOfURL: profilePictureUrl!)

        if profilePictureData != nil {

            let profilePictureObject = PFFile(data: profilePictureData!)
            PFUser.currentUser()?.setObject(profilePictureObject!, forKey: "profile_picture")

        }

        PFUser.currentUser()?.setObject(userFirstName, forKey: "first_name")
        PFUser.currentUser()?.setObject(userLastName, forKey: "last_name")
        PFUser.currentUser()?.setObject(username, forKey: "facebook_link")

        if userEmail == userEmail {

            PFUser.currentUser()?.email = userEmail

        }

        PFUser.currentUser()?.saveInBackgroundWithBlock({ (success:Bool, error:NSError?) -> Void in

            if error != nil {

                spinningActivity.hideAnimated(true)

                self.displayError("Error", message: error!.localizedDescription)

                PFUser.logOut()

            } else if success == true {

                if !userID.isEmpty {

                    spinningActivity.hideAnimated(true)

                NSUserDefaults.standardUserDefaults().setObject("authData", forKey: "facebookAuth")

                    NSUserDefaults.standardUserDefaults().synchronize()

                    self.performSegueWithIdentifier("facebookUserDetailsSegue", sender: self)



                }

            } else {

                spinningActivity.hideAnimated(true)

                self.displayError("Something Went Wrong", message: "Please try again")

                PFUser.logOut()

            }

        })

    }

}

}

如果你在转换到目标c的过程中遇到了困难,我敢打赌你可以找到关于如何做到这一点的YouTube视频。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36246670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档