Я использую flutter_auth
пакет для применения Phone Auth . Обычно он отправляет OTP при регистрации нового телефонного номера. Но он отправляет OTP снова и снова , хотя номер телефона пользователя указан в Firebase authentication list
Еще одна вещь - это то, что он работает нормально на нескольких устройствах, как обычно. Что-то не так с проблемой синхронизации? означает, что требуется время, чтобы получить syn c с firestore или нет?
Вот мой код phone auth
Что я делаю не так?
phoneAuth(String phone) async {
FirebaseAuth _auth = FirebaseAuth.instance;
_auth.verifyPhoneNumber(
phoneNumber: phone,
timeout: Duration(seconds: 60),
verificationCompleted: (AuthCredential credential) async {
Navigator.pop(context);
AuthResult authResult =
await _auth.signInWithCredential(credential);
FirebaseUser user = authResult.user;
if (user != null) {
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => AddContacts(
user: user,
)));
} else {
print("ERROR");
}
},
verificationFailed: (AuthException exception) {
Toast.show('Try Again Later', context,
backgroundColor: Colors.red,
duration: 3,
gravity: Toast.BOTTOM);
},
codeSent: (String verification, [int forceResendingToken]) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12)),
title: Text('Enter 6-Digit Code'),
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
TextField(
controller: _controllerCode,
keyboardType: TextInputType.number,
maxLength: 6,
decoration: InputDecoration(
errorText: validateCode(_controllerCode.text),
hintText: 'Enter Code',
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12.0)),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12.0)),
errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12.0),
borderSide: BorderSide(color: Colors.red)),
focusedErrorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12.0),
borderSide: BorderSide(color: Colors.red)),
),
)
],
),
actions: <Widget>[
Text(
"Wait for Automatic Detection!",
style: TextStyle(fontSize: 10, color: Colors.red),
),
FlatButton(
padding: EdgeInsets.symmetric(horizontal: width * .05),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12)),
child: Text("Confirm"),
textColor: Colors.white,
color: Colors.lightBlue,
onPressed: () async {
setState(() {
_controllerCode.text.isEmpty
? _validateCode = true
: _validateCode = false;
});
final code = _controllerCode.text.trim();
AuthCredential credential =
PhoneAuthProvider.getCredential(
verificationId: verification, smsCode: code);
AuthResult result =
await _auth.signInWithCredential(credential);
FirebaseUser user = result.user;
if (user != null) {
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => AddContacts(
user: user,
)));
} else {
Toast.show("ERROR: Code mismatch!", context,
backgroundColor: Colors.red,
gravity: Toast.TOP);
}
},
)
],
);
});
},
codeAutoRetrievalTimeout: null);
}