我使用以下代码来检测身份验证提供程序并正确注销
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()
}
但提供商总是“Firebase”。我做错了什么?0_o当我登录twitter时,一旦该代码抛出“Facebook”。提前感谢
UPD:是的,我实际上可以在UserDefaults
中存储auth提供程序,但可能是Firebase bug。我使用的是Firebase SDK 3.5.2
7条答案
按热度按时间ivqmmu1c1#
由于用户可以通过多个提供商登录到其Firebase身份验证帐户,因此顶级提供商ID现在(通常)为
Firebase
。但是
currentUser
有一个providerData
属性,它提供了关于特定提供者的信息。在FIRAuth.auth()!.currentUser.providerData
上循环会给予你要找的FIRUserInfo.providerID
。另请参阅以下有关UID的问题,UID的情况类似:Firebase returns multiple IDs, Which is unique one?
e5nszbig2#
Swift 4解决方案:
rur96b6h3#
我必须
JSON.stringify(currentUser.providerData)
才能看到它是如何组织的:Stringify result
最后我找到了
Auth Provider
,如下所示:干杯,gl与您的代码:)
r7knjye24#
使用
currentUser.providerData
可以得到一个提供者数组,每个提供者都有自己的uid。该列表按照最近用于登录的提供者排序。因此currentUser.providerData
中的第一个元素是用户用于登录的方法。因此currentUser.providerData[0].providerId
将提供用户用于登录的方法。dkqlctbz5#
643ylb086#
要注销,有一种更简单的方法:
另一方面,如果要查找提供程序并确定用户是否通过该提供程序登录,请检查accessToken。要获取accessToken,需要提供给提供程序的特定提供程序示例。
我发现最好先在类中声明提供程序,方法如下:
然后,当您提供提供者时:
当您需要特定提供程序数据时:
否则,无论用户是否实际登录,您都将获得有关每个提供商的信息。
pnwntuvh7#
2022简单Javascript解决方案(Firebase v8)