Reputation: 3100
I'm trying to implement Facebook login with my Swift app. I was able to login to the app just fine. However, I ran into an issue once I logged the user out. I get the error the supplied Facebook session token is expired or invalid
. How can I generate a new token? Here's the code:
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.")
}
})
}
}
UPDATED CODE.
I get the following in log:
"uh oh, error logging in". Still allows me to login via FB. I click "Continue" in Facebook.
Log reads "logged in"
Log reads "Uh oh, user cancelled the Facebook login and it kicks me back to the login screen. The user, however, is still created in Parse. I would like to go to my signUp segue after signing in for the first time.
Upvotes: 0
Views: 403
Reputation: 1734
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.")
// }
//
//}
The part if let user = user { ... }
doesn't make sense to me because a new token result.token
just got by func logInWithReadPermissions
. Therefore, the updated token should be put through PFFacebookUtils.logInInBackgroundWithAccessToken(:)
again.
Upvotes: 1