我尝试使用 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');
}
}
linkWithProvider
而不是
此处提供的示例代码。我猜我错过的一个小细节是我没有尝试链接另一个身份验证方法,我只是尝试与另一个提供商进行身份验证,以便我可以链接提供商? 对我有用的解决方案如下(已经使用电子邮件和密码登录):
final currentUser = FirebaseAuth.instance.currentUser;
if (currentUser != null) {
TwitterAuthProvider twitterProvider = TwitterAuthProvider();
final userCredential = await currentUser.linkWithProvider(twitterProvider);
}
然后弹出 Twitter 登录信息,登录后我可以将我的电子邮件/密码与 Twitter 关联起来。