提供的 Facebook 会话令牌已过期或无效

Posted

技术标签:

【中文标题】提供的 Facebook 会话令牌已过期或无效【英文标题】:The supplied Facebook session token is expired or invalid 【发布时间】: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时间。

【问题讨论】:

【参考方案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 吗? ***.com/questions/29421659/… 。我想这可能是答案。我需要注销用户并重置令牌 @james 我刚刚更新了我的答案。请作为参考。干杯! 非常感谢您。我希望这可行,因为用户并没有真正“注销”(我从用户表中删除了用户进行测试,然后在 FB 中删除了应用程序)。我会告诉你这是否有效! 这似乎让我更接近了!更新了我的问题和代码。它似乎更新了令牌(让我用我的 FB 帐户再次登录),但随后它让我回到了我的登录屏幕 @james 登录后获得新令牌。在通过PFFacebookUtils.logInInBackgroundWithAccessToken 之前,用户仍然为零。请检查更新的答案。

以上是关于提供的 Facebook 会话令牌已过期或无效的主要内容,如果未能解决你的问题,请参考以下文章

加载操作中的 BigQuery 错误:令牌无效 - 令牌无效:无状态令牌已过期

facebook 访问令牌已过期

腾讯先锋怎么解决token过期

Facebook 令牌/会话策略

flutter_facebook_auth:提供的身份验证凭据格式错误或已过期

Laravel/Lumen Auth JWT 令牌在后续请求中无效,它可能已过期吗?