繁体   English   中英

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

[英]Firebase + Flutter : get platform user used to sign in

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

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

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

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

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

FirebaseUser user = await _firebaseAuth.currentUser();

if (user.providerData.length < 2) {
  // do something
}
else {
  print(res.providerId);  
}

由属性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

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

这似乎是你想要的: 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

在我的应用中,我使用了FirebaseAuth.instance.currentUser.providerData[0].providerId == 'google.com'. ,导致 providerData[1] 不包含任何值

但每次用户打开应用程序时,我都会花时间阅读。 这是事实!

或者,您可以使用SQFLite创建自己的应用程序数据库,并在其中仅创建一个表(user) ,其中的signUpMethod字段可能值为google, facebook and mail 每当您打开应用程序时,首先在您的数据库中检查,如果这是mail ,则重定向到您想要的另一个屏幕,否则调用firebase service

干杯!

对于任何在 2022 年阅读本文的人,Firebase 现在有很好的 Flutter 新文档,其中有这个,我个人认为它非常有用:

if (user != null) {
    for (final providerProfile in user.providerData) {
        // ID of the provider (google.com, apple.cpm, etc.)
        final provider = providerProfile.providerId;

        // UID specific to the provider
        final uid = providerProfile.uid;

        // Name, email address, and profile photo URL
        final name = providerProfile.displayName;
        final emailAddress = providerProfile.email;
        final profilePhoto = providerProfile.photoURL;
    }
}

资料来源: Firebase 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM