Firebase + Flutter:获取用于登录的平台用户

Kar*_*dts 6 authentication dart firebase flutter

我有一个具有 3 种登录方法的应用程序:Google、Facebook 和邮件。我想向使用邮件登录的用户显示不同的屏幕。是否可以从包 firebase 身份验证中获取登录方法?

我知道我可以通过使用 firestore 并检查语句是真是假来解决这个问题。但是每次用户打开应用程序时,我都会花费我一次阅读...

Gaz*_*kus 10

这似乎是你想要的:https : //firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseUser.html#getProviderData()

在我仅使用 Google 登录的应用程序中,我有firebaseUser.providerData[1].providerId == 'google.com'.

顺便说一句,firebaseUser.providerData[0].providerId == 'firebase'

我想你可以检查所有这些,并寻找为不同类型的用户提供的提供商。

编辑:这是我使用电子邮件登录时得到的信息:https : //postimg.cc/BXWGGN6h


awa*_*aik 10

Firebase 有一个特殊的属性providerId。但是,正如@GazihanAlankus 所提到的,它总是返回firebase.

而且,该属性firebaseUser.providerData[1].providerId有时不存在(例如,当用户使用匿名登录时)。

因此,我们应该使用适当的方法,例如:

FirebaseUser user = await _firebaseAuth.currentUser();

if (user.providerData.length < 2) {
  // do something
}
else {
  print(res.providerId);  
}
Run Code Online (Sandbox Code Playgroud)

由 property 返回的值列表providerId

EmailAuthProviderID: password
PhoneAuthProviderID: phone
GoogleAuthProviderID: google.com
FacebookAuthProviderID: facebook.com
TwitterAuthProviderID: twitter.com
GitHubAuthProviderID: github.com
AppleAuthProviderID: apple.com
YahooAuthProviderID: yahoo.com
MicrosoftAuthProviderID: hotmail.com
Run Code Online (Sandbox Code Playgroud)

我从这里的酷研究中得到了这个列表firebase.UserInfo.providerId 的提供者 ID 的完整列表是什么?