Как поместить исходные данные снимка с помощью метода входа в систему с телефона - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь понять, как поместить исходные данные в Firestore, когда пользователь входит в систему, используя свой телефон # (и сохранять свои данные, когда они выходят из системы и снова входят в систему). Если кто-то работал с методом входа по электронной почте, вы знаете, что createUserWithEmailAndPassword запускается только один раз, когда пользователь регистрирует новую учетную запись.

Но для метода входа в Google и метода входа с телефона у него есть только одна функция, которая запускается каждый раз, когда они регистрируются, поэтому каждый раз, когда они выходят из системы и снова входят в систему, их данные получают перезаписаны исходными данными, которые я реализовал. Проблема в том, что я вызываю функцию, которая помещает исходные данные в Firestore каждый раз, когда они входят в систему с авторизацией телефона, как показано ниже. Я пробовал много способов обойти это, но безуспешно.

AuthCredential credential = PhoneAuthProvider.getCredential(verificationId: widget.verificationId, smsCode: smsCode);
                    AuthResult result = await _auth.signInWithCredential(credential);
                    FirebaseUser user = result.user;
                    await DatabaseService(uid: user.uid).updatingProfile( // How I put the initialData into Firestore
                      "", 
                      "https://www.nacdnet.org/wp-content/uploads/2016/06/person-placeholder.jpg",
                      user.phoneNumber
                    );
                    await DatabaseService(uid: user.uid).updatingStat(""); // How I put the initialData into Firestore
                    return user;

DatabaseService

// Create instance for Firestore collection 
  final CollectionReference _profileCollection = Firestore.instance.collection("profile");
  final CollectionReference _statCollection = Firestore.instance.collection("stat");

  // Updating user profile
  Future updatingProfile(String name, String image, String phoneNumber) async {
  return await _profileCollection.document(uid).setData({
    "name": name,
    "image": image,
    "phoneNumber": phoneNumber,
    });
  }

  // Updating user Stat
  Future updatingStat(String stat) async {
    return await _statCollection.document(uid).setData({
      "stat": stat,
      "lastUpdate": DateTime.now()
    });
  }

1 Ответ

0 голосов
/ 03 июня 2020

Один из способов, который сработал, заключался в использовании метода where для фильтрации. Сначала я запрашиваю все документы и фильтрую с помощью поля номера телефона, а затем go по каждому документу индивидуально, чтобы проверить, есть ли у них какие-либо документы в firestore, если нет, то создается новая учетная запись.

    AuthCredential credential = PhoneAuthProvider.getCredential(verificationId: widget.verificationId, smsCode: smsCode);
    AuthResult result = await _auth.signInWithCredential(credential);
    FirebaseUser user = result.user;
    QuerySnapshot resultFromDb = await _db
      .where("phoneNumber", isEqualTo: user.phoneNumber)
      .getDocuments();
       final List<DocumentSnapshot> docsFromDb = resultFromDb.documents;
        if (docsFromDb.length == 0) {
         await DatabaseService(uid: user.uid).updatingProfile(
          "", 
          "https://www.nacdnet.org/wp-content/uploads/2016/06/person-placeholder.jpg",
           user.phoneNumber
         );
         await DatabaseService(uid: user.uid).updatingStat("");
         return user;  
        }
...