I'm using the following code, to detect auth provider and log out properly
static func logOut() {
let auth = FIRAuth.auth()!
let provider = auth.currentUser?.providerID
switch provider! {
case "Facebook": FBSDKLoginManager().logOut()
case "Google": GIDSignIn.sharedInstance().signOut()
case "Twitter": Twitter.sharedInstance().sessionStore.logOutUserID(TWTRAPIClient.withCurrentUser().userID!)
default:
print("Unknown provider ID: \(provider!)")
return
}
try! auth.signOut()
}
But the provider is always "Firebase". What am I doing wrong? 0_o Once that code throw "Facebook" when I was logged in twitter. Thanks in advance
UPD: Yeah, I actually can store auth provider in UserDefaults
, but maybe it's Firebase bug. I'm using Firebase SDK 3.5.2
To logout there is a simpler method:
On the other hand, if you want to find the provider AND determine if the user is logged in via that provider, check the accessToken. To get the accessToken you need the specific provider instance you provided to providers.
I find this is best achieved by first declaring your providers in your class this way:
Then when you provide the providers:
When you want the specific provider data:
Otherwise you will get info on each provider regardless of whether the user is actually logged in.
I had to
JSON.stringify(currentUser.providerData)
in order to see how it's organized:Stringify result
And i finally found the
Auth Provider
like this:Cheers, gl with your code : )
Since a user can sign into their Firebase Authentication account with multiple providers, the top-level provider ID will now (usually) be
Firebase
.But the
currentUser
has aproviderData
property that provides information on the speciic providers. Looping overFIRAuth.auth()!.currentUser.providerData
will give you theFIRUserInfo.providerID
you're looking for.See also this question about UIDs, which are in a similar situation: Firebase returns multiple IDs, Which is unique one?
Swift 4 solution: