Flutter: OTP отправляется снова и снова, хотя пользователь зарегистрирован в Firebase Auth - PullRequest
1 голос
/ 30 марта 2020

Я использую 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);
    }

1 Ответ

2 голосов
/ 01 апреля 2020

Поскольку мы обсуждали проблему в чате LinkedIn в частном порядке. Мы дошли до точки вашей проблемы, которая, как вы сказали ..

OTP должна отправляться только тогда, когда пользователь входит в систему в первый раз, а не после этого. если я ввожу свой номер на другом устройстве, то снова отправляю OTP

Так что у вас возникла проблема, чтобы понять, как работает Auth OTP.

Код OTP отправляется каждый раз когда вы запрашиваете его, даже если вы уже зарегистрированы или вошли в систему на другом устройстве.

И вы тогда спросили.

Значит, он будет отправлять OTP каждый раз, неважно пользователь уже вошел в систему или новый?

Ответ - ДА, так и будет. Так что ваши коды на данный момент работают нормально. Все дело в том, как это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...