提供的 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 错误:令牌无效 - 令牌无效:无状态令牌已过期