Firebase Auth - 获取提供商 ID
Firebase Auth - get provider ID
我正在使用以下代码来检测身份验证提供程序并正确注销
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"。提前致谢
更新:是的,我实际上可以在 UserDefaults
中存储身份验证提供程序,但也许这是 Firebase 错误。我正在使用 Firebase SDK 3.5.2
由于用户可以通过多个提供商登录其 Firebase 身份验证帐户,顶级提供商 ID 现在(通常)为 Firebase
。
但是 currentUser
has a providerData
property that provides information on the speciic providers. Looping over FIRAuth.auth()!.currentUser.providerData
will give you the FIRUserInfo.providerID
您正在寻找。
另见关于 UID 的问题,情况类似:
Swift4解法:
if let providerData = Auth.auth().currentUser?.providerData {
for userInfo in providerData {
switch userInfo.providerID {
case "facebook.com":
print("user is signed in with facebook")
case "google.com":
print("user is signed in with google")
default:
print("user is signed in with \(userInfo.providerID)")
}
}
}
注销有一个更简单的方法:
let authUI = FUIAuth.defaultAuthUI()
do {
try authUI?.signOut()
} catch let err {
print(err);
}
另一方面,如果您想找到提供商并确定用户是否通过该提供商登录,请检查 accessToken。要获取 accessToken,您需要提供给提供者的特定提供者实例。
我发现最好先在 class 中声明您的供应商,方法如下:
lazy var facebookProvider = FUIFacebookAuth()
lazy var googleProvider = FUIGoogleAuth()
然后当您提供提供商时:
let providers: [FUIAuthProvider] = [ facebookProvider, googleProvider ]
当您需要特定提供者数据时:
if let providerData = Auth.auth().currentUser?.providerData {
for userInfo in providerData {
switch userInfo.providerID {
case "facebook.com":
if !facebookProvider.accessToken.isEmpty {
print("user is signed in with facebook")
}
case "google.com":
if !googleProvider.accessToken.isEmpty {
print("user is signed in with google")
}
default:
print("user is signed in with \(userInfo.providerID)")
}
}
}
否则,无论用户是否实际登录,您都将获得每个提供商的信息。
我不得不JSON.stringify(currentUser.providerData)
为了看看它是如何组织的:
Stringify result
我终于找到了这样的 Auth Provider
:
currentUser.providerData[0].providerId
干杯,用你的代码 :)
使用 currentUser.providerData
为您提供提供者数组,每个提供者都有自己的 uid。该列表按最近用于登录的提供商排序。因此 currentUser.providerData
中的第一个元素是用户用于登录的方法。
因此 currentUser.providerData[0].providerId
将为您提供用户用于登录的方法。
// Provider Type
struct AuthProviders {
static let phone = "phone"
static let facebook = "facebook.com"
static let google = "google.com"
static let apple = "apple.com"
}
let providerIds = auth.currentUser?.providerData.map { [=10=].providerID }
我正在使用以下代码来检测身份验证提供程序并正确注销
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"。提前致谢
更新:是的,我实际上可以在 UserDefaults
中存储身份验证提供程序,但也许这是 Firebase 错误。我正在使用 Firebase SDK 3.5.2
由于用户可以通过多个提供商登录其 Firebase 身份验证帐户,顶级提供商 ID 现在(通常)为 Firebase
。
但是 currentUser
has a providerData
property that provides information on the speciic providers. Looping over FIRAuth.auth()!.currentUser.providerData
will give you the FIRUserInfo.providerID
您正在寻找。
另见关于 UID 的问题,情况类似:
Swift4解法:
if let providerData = Auth.auth().currentUser?.providerData {
for userInfo in providerData {
switch userInfo.providerID {
case "facebook.com":
print("user is signed in with facebook")
case "google.com":
print("user is signed in with google")
default:
print("user is signed in with \(userInfo.providerID)")
}
}
}
注销有一个更简单的方法:
let authUI = FUIAuth.defaultAuthUI()
do {
try authUI?.signOut()
} catch let err {
print(err);
}
另一方面,如果您想找到提供商并确定用户是否通过该提供商登录,请检查 accessToken。要获取 accessToken,您需要提供给提供者的特定提供者实例。
我发现最好先在 class 中声明您的供应商,方法如下:
lazy var facebookProvider = FUIFacebookAuth()
lazy var googleProvider = FUIGoogleAuth()
然后当您提供提供商时:
let providers: [FUIAuthProvider] = [ facebookProvider, googleProvider ]
当您需要特定提供者数据时:
if let providerData = Auth.auth().currentUser?.providerData {
for userInfo in providerData {
switch userInfo.providerID {
case "facebook.com":
if !facebookProvider.accessToken.isEmpty {
print("user is signed in with facebook")
}
case "google.com":
if !googleProvider.accessToken.isEmpty {
print("user is signed in with google")
}
default:
print("user is signed in with \(userInfo.providerID)")
}
}
}
否则,无论用户是否实际登录,您都将获得每个提供商的信息。
我不得不JSON.stringify(currentUser.providerData)
为了看看它是如何组织的:
Stringify result
我终于找到了这样的 Auth Provider
:
currentUser.providerData[0].providerId
干杯,用你的代码 :)
使用 currentUser.providerData
为您提供提供者数组,每个提供者都有自己的 uid。该列表按最近用于登录的提供商排序。因此 currentUser.providerData
中的第一个元素是用户用于登录的方法。
因此 currentUser.providerData[0].providerId
将为您提供用户用于登录的方法。
// Provider Type
struct AuthProviders {
static let phone = "phone"
static let facebook = "facebook.com"
static let google = "google.com"
static let apple = "apple.com"
}
let providerIds = auth.currentUser?.providerData.map { [=10=].providerID }