在我的应用程序中,有一个登录荧屏、注册荧屏和一个 showProfile 荧屏。我正在使用电子邮件和密码注册用户。在注册荧屏中,有包含图片、名字、姓氏和电话号码的栏位。我可以通过执行此操作将用户显示名称、影像 URL 添加到特定用户 -
UserCredential user = await _auth.createUserWithEmailAndPassword(email: _email, password: _password);
var newUser = user.user;
if (newUser != null) {
Reference imgReference = firebaseStorage.ref().child('UserImages/$_email');
UploadTask uploadTask = imgReference.putFile(imgFile);
TaskSnapshot taskSnapshot = await uploadTask;
String url = await taskSnapshot.ref.getDownloadURL();
if (url != null) {
setState(() {
imgUrl = url;
});
}
await newUser.updatePhotoURL(imgUrl);
await newUser.updateDisplayName(_firstName ' ' _lastName);
await newUser.reload();
}
现在我想在注册程序中向用户添加带有 OTP 验证的电话号码。. 但是如果不创建另一个带有电话号码的用户账户,我就无法为电话号码做同样的事情。
以便成功登录后,在我的 showProfile 荧屏中,我可以决议用户电话号码。通过user.phoneNumber到荧屏就像我可以为user.displayName & user.photoURL执行此操作而不会遇到任何问题。
有什么办法可以将电话号码添加到注册的电子邮件账户中吗?我搜索了它,但找不到任何可以开始的东西。
uj5u.com热心网友回复:
使用 Firebase 身份验证验证电话号码被视为使用该提供商登录。因此,不是将电话号码添加到现有登录,您实际上是要通过另一个提供商登录用户,然后将该新提供商链接到现有用户组态档。
这些步骤在很大程度上类似于使用电话号码登录,但不是signInWithCredential(credential)
使用电话凭据呼叫,而是呼叫linkWithCredential(credential)
当前用户,如账户链接档案中所示。
上面是 Android 档案的链接,因为我觉得这些档案最清楚地记录了这个程序,而且这个程序跨平台是相似的。对于 FlutterFire 等效项,请参阅有关电话身份验证和账户链接的档案。
uj5u.com热心网友回复:
因此,经过长时间的搜索、查找和尝试解决方案,我终于能够解决我的问题。添加了使用 firebase OTP 验证的电话号码到已注册的电子邮件通行证账户。谢天谢地,这个答案对我来说非常好。这是代码:
final _auth = FirebaseAuth.instance;
final userInfo = _auth.currentUser;
Future<void> phoneVerification() async {
await _auth.verifyPhoneNumber(
phoneNumber: _mobile,
verificationCompleted: (PhoneAuthCredential phoneAuthCredential) async {
/// This is the main important line to link
await userInfo.linkWithCredential(phoneAuthCredential);
// Not nessecary
/* User? refreshedUser = await refreshUser(userInfo);
if (refreshedUser != null) {
setState(() {
userInfo = refreshedUser;
});
} */
},
verificationFailed: (FirebaseAuthException e) {
// Handle error
print(e);
},
codeSent: (String verificationId, int? resendToken) async {
// write the code to handle the OTP code sent for manual verification in case autoverify doesn't work
},
codeAutoRetrievalTimeout: (String verificationId) {
// Do Something for SMS request timeout
},
);
}
0 评论