Firebase 如何将手机与电子邮件/密码身份验证链接?
我正在尝试创建一个Flitter应用程序,在该应用程序中,使用电子邮件/密码创建用户后,他们将保存在firebase中,然后用户输入其发送OTP的电话号码,用户在验证后登录。我的问题是,当这两个步骤都完成后,firebase将创建两个单独的帐户,一个是电子邮件帐户,另一个是电话帐户。请告诉我如何使用电子邮件/密码和电话创建单个帐户。我还想用电子邮件/密码或电话登录。或者使用电子邮件/密码和电话创建用户的任何其他方式Firebase 如何将手机与电子邮件/密码身份验证链接?,firebase,flutter,firebase-authentication,Firebase,Flutter,Firebase Authentication,我正在尝试创建一个Flitter应用程序,在该应用程序中,使用电子邮件/密码创建用户后,他们将保存在firebase中,然后用户输入其发送OTP的电话号码,用户在验证后登录。我的问题是,当这两个步骤都完成后,firebase将创建两个单独的帐户,一个是电子邮件帐户,另一个是电话帐户。请告诉我如何使用电子邮件/密码和电话创建单个帐户。我还想用电子邮件/密码或电话登录。或者使用电子邮件/密码和电话创建用户的任何其他方式 void _verifyPhoneNumber() async { if (mo
void _verifyPhoneNumber() async {
if (mounted)
setState(() {
_message = '';
});
final PhoneVerificationCompleted verificationCompleted =
(AuthCredential phoneAuthCredential) {
_firebaseUser.updatePhoneNumberCredential(phoneAuthCredential);
if (mounted)
setState(() {
_message = 'Received phone auth credential: $phoneAuthCredential';
});
};
final PhoneVerificationFailed verificationFailed =
(AuthException authException) {
showToast(authException.message,
gravity: Toast.TOP, duration: Toast.LENGTH_LONG);
if (mounted)
setState(() {
_isLoading = false;
_message =
'Phone number verification failed. Code: ${authException.code}. Message: ${authException.message}';
});
};
final PhoneCodeSent codeSent =
(String verificationId, [int forceResendingToken]) async {
print('Please check your phone for the verification code.');
_verificationId = verificationId;
setState(() {
_isLoading = false;
});
Navigator.of(context).pushReplacement(new MaterialPageRoute(
builder: (BuildContext context) =>
new VerifyOtp(_firebaseUser, verificationId)));
};
final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
(String verificationId) {
_verificationId = verificationId;
};
await _firebaseAuth.verifyPhoneNumber(
phoneNumber: phoneController.text,
timeout: const Duration(minutes: 2),
verificationCompleted: verificationCompleted,
verificationFailed: verificationFailed,
codeSent: codeSent,
codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
}
核实*
final AuthCredential credential = PhoneAuthProvider.getCredential(
verificationId: widget.verificationId,
smsCode: otpController.text,
);
await _firebaseAuth.signInWithCredential(credential).then((user) {
}).catchError((error) {
showToast(error.toString(),
gravity: Toast.TOP, duration: Toast.LENGTH_LONG);
});
您需要在电子邮件密码登录后将电话身份验证提供商链接到firebase用户对象。 . 由于您直接调用登录,FixBase就将其视为新的签名/注册,创建新帐户。 当您在应用程序的设置页面中创建了
AuthCredential
时,您可能正在向用户添加手机身份验证,只需在Flatter中调用firebaseUser.linkWithCredential()
等同物,它就会将手机身份验证连接到用户
您可以从firebase控制台进行验证,在该控制台中,手机和邮件徽标将显示在用户的电子邮件上
await _firebaseAuth.signInWithCredential(credential).then((user) {
}).catchError((error) {
showToast(error.toString(),
gravity: Toast.TOP, duration: Toast.LENGTH_LONG);
});
换成
firebaseUser.linkWithCredential(credential).then((user) {
print(user.uid);
}).catchError((error) {
print(error.toString());
});
这是我的工作