![](/img/trans.png)
[英]Flutter - Can Google Sign in be used without firebase?
[英]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 的完整列表是什么?
在我仅使用 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.