【发布时间】:2021-06-12 11:35:57
【问题描述】:
我正在尝试使用 Flutter 和 Firebase 制作应用程序。我正在使用 FirebaseAuth 进行注册和登录。我将手机号码和密码作为输入,并使用电话号码创建一个虚拟电子邮件,并使用 firebase auth signInWithEmailPassword 登录。我想做的是第一次用户注册,我想将 otp 发送到那个号码,如果号码经过验证,我想用那个虚拟电子邮件和密码注册。任何想法如何实现这一目标。我尝试了一些方法,但即使 otp 错误,用户仍在注册。
String email = '';
String password = '';
String name = '';
String contact = '';
String error = '';
String smsCode = '';
String verificationId;
bool loading = false;
Future<void> verifyPhone() async {
print('Inside verify phone');
final PhoneCodeAutoRetrievalTimeout autoRetrieve = (String verId) {
this.verificationId = verId;
};
final PhoneCodeSent smsCodeSent = (String verId, [int forceCodeResend]) {
this.verificationId = verId;
print('Inside code sent');
smsCodeDialog(context).then((value) {
print('Signed in');
});
};
final PhoneVerificationCompleted verifiedSuccess =
(AuthCredential credential) {
print('verified');
};
final PhoneVerificationFailed verificationFailed =
(AuthException exception) {
print('${exception.message}');
};
if (_formKey.currentState.validate()) {
await FirebaseAuth.instance.verifyPhoneNumber(
phoneNumber: '+91 ' + contact,
timeout: const Duration(seconds: 10),
verificationCompleted: verifiedSuccess,
verificationFailed: verificationFailed,
codeSent: smsCodeSent,
codeAutoRetrievalTimeout: autoRetrieve,
);
}
}
Future<bool> smsCodeDialog(BuildContext context) {
return showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return new AlertDialog(
title: Text('Enter SMS Code'),
content: TextField(
onChanged: (value) {
this.smsCode = value;
},
),
contentPadding: EdgeInsets.all(10),
actions: <Widget>[
TextButton(
onPressed: () async {
dynamic result =
await _auth.register(email, password, name, contact);
if (result == null) {
Navigator.pop(context);
setState(() {
loading = false;
error = "Already registered or Invalid Details.";
});
} else {
Navigator.pop(context);
Navigator.pushNamedAndRemoveUntil(
context, '/', (Route<dynamic> route) => false);
}
},
child: Text('Register',
style: GoogleFonts.abhayaLibre(
textStyle: TextStyle(
fontSize: 24, color: Colors.green[900]))))
],
);
});
}
在提交表单时,我正在调用 verifyPhone 方法。
【问题讨论】:
-
你能告诉我们你写的代码吗?
-
我更新了问题。请回来查看。
-
在哪里查看短信验证码,验证码是真是假
-
怎么做?它在正确的短信代码上打印验证,这意味着它正在自动比较,对吧?
-
几个月前我实现了一个类似的系统,但我必须使用 PhoneAuthProvider.getCredential 创建一个 AuthCredential 然后尝试使用 signInWithCredential 登录用户
标签: android firebase flutter firebase-authentication