Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to Login as Different User After Logging out of iOS application

So here is my problem. I log in to my application, then log out of my application, but when I try to log in again, I get the screen in the link below.

Login Screen

As you can see, I don't get the opportunity to login with another user, which is what is intended.

What I tried to do was logout and then clear all the cookies in the logout using these following methods:

 @IBAction func logout(sender: AnyObject) {

    //Logged out here
    let loginManager = FBSDKLoginManager()
    loginManager.logOut()

   //This is one method I tried 
    let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)


    //This is another method I tried 
    for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
        NSUserDefaults.standardUserDefaults().removeObjectForKey(key)
    }


    //And this is the last method I tried
    var cookie: NSHTTPCookie
    var storage: NSHTTPCookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()

    for cookie in storage.cookies! {
        var domainName: String = cookie.domain
        var domainRange: Range = domainName.rangeOfString("facebook")
        if domainRange.length > 0 {
            storage.deleteCookie(cookie)
        }
    }

}

None of these seemed to solve my problem. The app is in "Development" mode in the Facebook Dev account so it might have something to do with this, but not totally sure. Does someone have any experience with this and know the solution to our problem, as shown in the image above.

like image 407
Sampath Duddu Avatar asked Oct 18 '22 19:10

Sampath Duddu


1 Answers

The whole goal of Facebook login is to allow quick, seamless login into your Facebook account without having to re-enter credentials.

To achieve this, the Facebook SDK tries to leverage credentials that are already stored on the device, which may include:

  • login information from the Facebook app
  • cookies related to Facebook login in Safari (directly or via the SFSafariViewController)
  • system Facebook accounts

When you logout, you actually only have the Facebook SDK forget the credentials within the app (it clears the token). When you login again, it acts like the first time you did, and if it finds an existing user, it will use that (the Facebook SDK makes the — usually valid — assumption that there is a single person using the device, and they have a single Facebook account).

The current "favorite" path for the Facebook SDK (though that varies with SDK versions, iOS versions, and possibly other parameters) is SFSafariViewController, which shares cookies with Safari, not with your app.

If you want the user to completely log out on the device, they would then have to use the log out link within Facebook in Safari (or an SFSafariViewController).

If you want to do so programatically, you may open the following URL in Safari or an SFSafariViewController:

https://www.facebook.com/logout.php?next=[YourAppURL]&access_token=[ValidAccessToken]

You'll have to use a custom URL scheme to return to your app/exit the SFSafariViewController, though.

like image 115
jcaron Avatar answered Oct 21 '22 17:10

jcaron