【问题标题】:The supplied Facebook session token is expired or invalid提供的 Facebook 会话令牌已过期或无效
【发布时间】:2016-03-11 03:45:50
【问题描述】:

我正在尝试使用我的 Swift 应用程序实现 Facebook 登录。我能够很好地登录应用程序。但是,一旦我注销用户,我就遇到了一个问题。我收到错误the supplied Facebook session token is expired or invalid。如何生成新令牌?代码如下:

      if let accessToken: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken() {
        PFFacebookUtils.logInInBackgroundWithAccessToken(accessToken, block: {
            (user: PFUser?, error: NSError?) -> Void in
            if user != nil {
                print("User logged in through Facebook!")

                self.navigateToInGame(true)

            } else {
                print("Uh oh. There was an error logging in.")

                let manager = FBSDKLoginManager()
                manager.logOut()
                manager.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: { (result, error) -> Void in
                    if let error = error {
                        print(error.localizedDescription)
                    }

                    if result.isCancelled {
                        print("Cancelled")
                    } else {
                        print("Logged in")
                        if let user = user {
                            if user.isNew {
                                print("User signed up and logged in through Facebook!")

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

                            } else {
                                print("User logged in through Facebook!")

                                self.navigateToInGame(true)
                            }
                        } else {
                            print("Uh oh. The user cancelled the Facebook login.")
                        }

                    }
                })

                if accessToken.expirationDate.compare(NSDate()) == NSComparisonResult.OrderedAscending {
                    FBSDKLoginManager.renewSystemCredentials({ (result, error) -> Void in
                        if result != .Renewed {
                            // Do further procedures once renewed is failed or rejected
                            print("Token didn't renew")
                        }
                    })
                }

            }
        })
    } else {
        let permissions = ["public_profile", "email"]
        PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions, block: {
            (user: PFUser?, error: NSError?) -> Void in
            if let user = user {
                if user.isNew {
                    print("User signed up and logged in through Facebook!")

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

                } else {
                    print("User logged in through Facebook!")

                    self.navigateToInGame(true)
                }
            } else {
                print("Uh oh. The user cancelled the Facebook login.")
            }
        })
    }
}

更新的代码。

我在日志中得到以下信息:

“哦哦,登录错误”。仍然允许我通过 FB 登录。我在 Facebook 中点击“继续”。

日志显示“已登录”

日志显示“哦,哦,用户取消了 Facebook 登录,它把我踢回登录屏幕。但是,用户仍然是在 Parse 中创建的。我想在第一次登录后转到我的 signUp segue时间。

【问题讨论】:

    标签: ios swift facebook facebook-graph-api parse-platform


    【解决方案1】:
    if result.isCancelled {
        print("Cancelled")
    } else {
        result.token // Your new token is here and throw the token into logInInBackgroundWithAccessToken(:) again
    }
    //else {
    //    print("Logged in")
    //    if let user = user {
    //        if user.isNew {
    //            print("User signed up and logged in through Facebook!")
    //            
    //            self.performSegueWithIdentifier("signUp", sender: self)
    //            
    //        } else {
    //            print("User logged in through Facebook!")
    //            
    //            self.navigateToInGame(true)
    //        }
    //    } else {
    //        print("Uh oh. The user cancelled the Facebook login.")
    //    }
    //    
    //}
    

    if let user = user { ... } 部分对我来说没有意义,因为 func logInWithReadPermissions 刚刚获得了一个新令牌 result.token。所以更新后的token需要再次通过PFFacebookUtils.logInInBackgroundWithAccessToken(:)

    【讨论】:

    • 感谢您的回复!我将该代码放在错误记录的位置,但它没有通过 if 语句。您知道如何将此答案转换为 swift 吗? stackoverflow.com/questions/29421659/… 。我想这可能是答案。我需要注销用户并重置令牌
    • @james 我刚刚更新了我的答案。请作为参考。干杯!
    • 非常感谢您。我希望这可行,因为用户并没有真正“注销”(我从用户表中删除了用户进行测试,然后在 FB 中删除了应用程序)。我会告诉你这是否有效!
    • 这似乎让我更接近了!更新了我的问题和代码。它似乎更新了令牌(让我用我的 FB 帐户再次登录),但随后它让我回到了我的登录屏幕
    • @james 登录后获得新令牌。在通过PFFacebookUtils.logInInBackgroundWithAccessToken 之前,用户仍然为零。请检查更新的答案。
    猜你喜欢
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多