繁体   English   中英

PFUser currentUser在使用Parse SDK登录Facebook后返回nil

[英]PFUser currentUser returns nil after Facebook Login with Parse SDK

我目前正在开发一个iOS应用,该应用允许通过Facebook / Parse登录。 登录流程如下所示:

  • 触摸登录按钮并打开Facebook登录窗口;

  • 用户登录并在Facebook上授予许可;

  • 应用程序检索Facebook accessToken信息;

  • 应用执行[PFFacebookUtils logInInBackGroundWithAccessToken:(accessToken)^ block {}]进行解析登录身份验证;

  • 应用进入视图并尝试执行查询以从Parse中获取与该用户关联的数据。

问题是:执行logInInBackgroundWithAccessToken之后,[PFUser currentUser]返回nil,并且出现“无法对类型进行比较查询:(空)”错误。

好! 解决了!

在深入研究代码后,我意识到

[PFFacebookUtils logInInBackgroundWithAccessToken:(accessToken) block:^(nullable__block){}];

由于未知原因,未执行回调。

为了解决这个问题,我在视图的-viewDidLoad方法中添加了一个检查,以查看是否存在有效的[FBSDKAccessToken currentAccessToken]但不是有效的[PFUser currentUser],如果是,则强制执行该方法。

如果您需要更详尽的解释,请随时发表评论! 谢谢!

if ((currentUser != nil)) {

        if (PFFacebookUtils.isLinkedWithUser(currentUser!)) {
            proccessCurrent(currentUser!)

        } else {
            PFFacebookUtils.linkUserInBackground(currentUser!, withReadPermissions: self.facebookReadPermissions, block: {(success, error) in
                if (success) {
                    self.proccessCurrent(currentUser!)

                } else {
                    self.presentWalkThroughViewController()
                }
            })


        }
    } else {
        //var currentToken: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken()

        if (FBSDKAccessToken.currentAccessToken() == nil) {
            self.presentWalkThroughViewController()

        } else {
            var currentToken: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken()
                PFFacebookUtils.logInInBackgroundWithAccessToken(currentToken, block: {(user, error) in
                if (error == nil) {
                    user?.pinInBackgroundWithBlock({(success, error) in
                        if (success) {
                            self.proccessCurrent(user!)
                        } else {
                           self.presentWalkThroughViewController()
                        }

                    })
                } else {
                    self.presentWalkThroughViewController()
                }
            })
        }
    }

方法processCurrentUser,继续处理我的程序执行,presentWalkThroughViewController呈现登录屏幕。 一旦用户已经登录,这是否是一种安全的方法来跳过在Facebook上的登录屏幕?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM