Firebase flutter:提供商在不更改当前用户的情况下进行身份验证(已链接到给定提供商)

问题描述 投票:0回答:2

我尝试使用 Firebase 通过 flutter 应用程序将 Twitter 身份验证提供商链接到电子邮件和密码帐户。我首先想使用电子邮件和密码登录/注册,然后在某个时候(几个小时、几天、无论何时……)使用用户的 Twitter 帐户进行身份验证并将其与该电子邮件和密码帐户关联起来。

代码看起来非常简单,但每当我尝试调用

signInWithProvider(TwitterAuthProvider())

 后跟 
linkWithCredential(twitterAuthCredential.credential)
 时,当前用户 
FirebaseAuth.instance.currentUser
 就会被注销并替换为 twitter 用户,并且我收到一条错误,表明提供者已链接到当前用户:
Exception has occurred. FirebaseAuthException ([firebase_auth/provider-already-linked] User has already been linked to the given provider.)

链接帐户的唯一方法是在注册/登录期间检索凭据吗?

我已经看到了

初始化不同应用程序的解决方案,但我希望还有另一种方法。

此处提到的选项 - 更改每个电子邮件的提供商

已移至“身份验证”>“设置”,但默认值是“链接使用同一电子邮件的帐户” 我知道说明上写着“最多但不包括

signInWith

调用”,但出于安全原因,我在用户登录后获取密码的选项有限,而且我无法存储他们的密码密码,也是安全最佳实践。

我正在使用的 Twitter 帐户,使用与 Twitter 帐户相同的电子邮件。

谢谢,

final currentUser = FirebaseAuth.instance.currentUser; // already logged in with email and password if (currentUser != null) { TwitterAuthProvider twitterProvider = TwitterAuthProvider(); UserCredential twitterAuthCredential = await FirebaseAuth.instance.signInWithProvider(twitterProvider); if (twitterAuthCredential.credential != null) { await currentUser.linkWithCredential(twitterAuthCredential.credential!); } else { debugPrint('Could not link Twitter auth credentials'); } }

	
flutter firebase firebase-authentication
2个回答
2
投票
linkWithProvider

而不是

此处
提供的示例代码。我猜我错过的一个小细节是我没有尝试链接另一个身份验证方法,我只是尝试与另一个提供商进行身份验证,以便我可以链接提供商? 对我有用的解决方案如下(已经使用电子邮件和密码登录):

final currentUser = FirebaseAuth.instance.currentUser; if (currentUser != null) { TwitterAuthProvider twitterProvider = TwitterAuthProvider(); final userCredential = await currentUser.linkWithProvider(twitterProvider); }

然后弹出 Twitter 登录信息,登录后我可以将我的电子邮件/密码与 Twitter 关联起来。

]


0
投票

https://firebase.flutter.dev/docs/auth/account-linking

© www.soinside.com 2019 - 2024. All rights reserved.