Как проверить, зарегистрирован ли номер телефона в аутентификации firebase с помощью flutter

Итак, я делаю простые экраны регистрации и входа в приложение flutter, которое использует телефонную аутентификацию firebase. Для регистрации я могу зарегистрировать нового пользователя, так как пользователь предоставляет свой номер телефона и получает OTP. Но для входа в систему я хочу проверить, зарегистрирован ли уже введенный номер. Если это так, он получает otp и входит в систему, а если не зарегистрирован, то сначала просит зарегистрироваться.


person Aagam Shah    schedule 19.05.2020    source источник
comment
Здравствуйте, я делал это не для телефонных номеров, а для электронной почты. Я сохранил копию пользователей в Firestore, потому что база данных пользователей недоступна (только из admin sdk, если я хорошо помню). Вы также можете сделать другой способ определения функции, которая запускает создание пользователя, когда вы создаете его в Firestore db.   -  person camillo777    schedule 19.05.2020
comment
Привет, вы смогли узнать ответ на это? Я сейчас в такой же ситуации и не знаю, как действовать дальше. есть ли способ определить, зарегистрирован ли номер телефона или нет?   -  person Reuben    schedule 21.05.2020


Ответы (2)


SDK администратора Firebase поддерживает это. Вот как настроить администратора firebase (документация). После настройки администратора вы можете использовать пакет cloud_functions для вызова API из административного SDK firebase и API. мы будем использовать тот, который позволяет нам получить пользователя по номеру телефона (документация). Если ответ API - это запись пользователя, мы знаем, что телефон существует.

В этом примере я использую node.js. В functions / index.js:

exports.checkIfPhoneExists = functions.https.onCall((data, context) => {
   const phone = data.phone
   return admin.auth().getUserByPhoneNumber(phone)
    .then(function(userRecord){
        return true;
    })
    .catch(function(error) {
        return false;
    });
});

В вашем коде дротика:

final HttpsCallable callable = CloudFunctions.instance.getHttpsCallable(functionName: 'checkIfPhoneExists');
dynamic resp = await callable.call({'phone': _phone});
if (resp.data) {
    // user exists
}
person Karen    schedule 28.05.2020

После отправки OTP пользователю вы можете проверить, является ли пользователь новым или уже существующим, в функции проверки OTP.

verifyOtp(String input, context) async {
  String retVal = "error";
  OurUser _user = OurUser();
  print(input);
  final AuthCredential credential = PhoneAuthProvider.credential(
      verificationId: _verificationId, smsCode: input);
  try {
    //  await _auth.signInWithCredential(credential);
    UserCredential _authResult = await _auth.signInWithCredential(credential);

    // Here i have to save the details of the user in the database
    if (_authResult.additionalUserInfo.isNewUser) {
      currentUser.uid = _authResult.user.uid;
      currentUser.phone = _inputText;
      currentUser.type = "Customer";

      retVal = await OurDatabase().createUser(currentUser);
    } else {
      // get the information of the user from the database this already exists
      currentUser = await OurDatabase().getUserInfo(_authResult.user.uid);
      if(currentUser!= null) {
        Navigator.pushNamedAndRemoveUntil(
            context, "/homescreen", (route) => false);
      }
    }
    print("End of the await");

    // when signup with the otp
    if (retVal == "success") {
      print("why not inside this mane");
      Navigator.pushNamedAndRemoveUntil(
          context, "/homescreen", (route) => false);
    }

    saveAllData();
  } catch (e) {
    print(e);
    print("Something went wrong");
    //prin
  }
}

Теперь это когда вы хотите проверить OTP от пользователя, и после проверки верхней части вы можете узнать, действительно ли пользователь был новым пользователем или старым, но что, если вы хотите знать это заранее, тогда лучшим возможным решением будет создать новую коллекцию в firestore, в которой будет только один документ (так что вы платите только за один прочитанный документ), который будет содержать только все номера пользователей, зарегистрированных в вашем приложении,

person HighCoder    schedule 13.04.2021