你如何链接firebase_auth 0.11.1中的firebase帐户?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (44)

我已经使用firebase_auth 0.11.0成功实施了谷歌和Facebook登录Flutter。我需要为具有相同电子邮件地址的帐户实施关联帐户功能。

Future<FirebaseUser> _signInWithGoogle() async {
  final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
  final GoogleSignInAuthentication googleAuth = await googleUser.authentication;

  final AuthCredential credential = GoogleAuthProvider.getCredential(
  accessToken: googleAuth.accessToken,
  idToken: googleAuth.idToken,
);

final FirebaseUser user = await _auth.signInWithCredential(credential);

如何/在哪里捕获Firebase错误(auth / account-exists-with-different-credential)该帐户是重复的电子邮件,因此需要该linkwithcredential功能?我试图抓住错误signInWithCredential以及_signInWithGoogle()无效。

根据这里的例子:

https://github.com/flutter/plugins/blob/06256967e494e6d719023a249c8bdaae4b3ae065/packages/firebase_auth/test/firebase_auth_test.dart

FirebaseUser user = await auth.currentUser(); user = await user.linkWithCredential(credential);

这是您链接帐户的方式,但我的问题是您如何确定需要运行此功能?

编辑:为清楚起见,当只有一个凭据/会话存在时,我可以链接帐户吗?例如,流程应该是,用Facebook登录,catch(ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL),然后链接到Google。

提问于
用户回答回答于

基于以下信息:在登录时将多个身份验证提供程序与Firebase链接

(如果仍然准确)我的流量是无法实现的,即您无法在未登录第一个firebase帐户的情况下链接帐户,例如登录Google THEN登录并链接Facebook。

我需要的用户流程需要通过为同一封电子邮件启用多个帐户来实现。虽然这会带来更多的问题,第二个火力点帐户用户FirebaseUser user不包含电子邮件,user.emailnull。虽然user.providerData有电子邮件。

用户回答回答于

获取当前用户的提供商ID列表,如果它有FB但没有Google,那么Google可以链接到它

List<UserInfo> providerList = _auth.currentUser().providerData;

//使用crecentials捕获登录的错误,检查错误类型,执行///可能的错误:

  • ERROR_INVALID_CREDENTIAL - 如果凭据数据格式错误或已过期。
  • ERROR_USER_DISABLED - 如果用户已被禁用(例如,在Firebase控制台中)
  • ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL - 如果已存在包含Google声明的电子邮件地址的帐户。通过调用[fetchSignInMethodsForEmail]然后要求用户使用其中一个登录来解决此问题。如果在Firebase控制台中启用了“每个电子邮件地址一个帐户”设置(推荐),则只会抛出此错误。
  • ERROR_OPERATION_NOT_ALLOWED - 表示未启用Google帐户。
  • ERROR_INVALID_ACTION_CODE - 如果链接中的操作代码格式错误,已过期或已被使用。

final onError = (exception, stacktrace) { /*ERROR HANDLING*/ };

final FirebaseUser user = await _auth.signInWithCredential(credential).catchError(onError);

扫码关注云+社区

领取腾讯云代金券