Flutter: добавление аутентифицированных пользователей в Firestore - PullRequest
0 голосов
/ 08 апреля 2020

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

Container(
                    width: 150.0,
                    child: FlatButton(
                      child: Text('Sign Up'),
                      color: Colors.grey,
                      onPressed: () {
                        if (_registerFormKey.currentState.validate()) {
                          if (pwdInputController.text ==
                              confirmPwdInputController.text) {
                            FirebaseAuth.instance
                                .createUserWithEmailAndPassword(
                                    email: emailInputController.text,
                                    password: pwdInputController.text)
                                .then((currentUser) => Firestore.instance
                                    .collection("users")
                                    .document(currentUser.user.uid)
                                    .setData({
                                      "uid": currentUser.user.uid,
                                      "first-name":
                                          firstNameInputController.text,
                                      "last-name":
                                          lastNameInputController.text,
                                      "email": emailInputController.text,
                                      'password': pwdInputController.text,
                                    })
                                    .then((result) => {
                                          Navigator.pushAndRemoveUntil(
                                              context,
                                              MaterialPageRoute(
                                                  builder: (context) =>
                                                      MyApp()),
                                              (_) => false),
                                          firstNameInputController.clear(),
                                          lastNameInputController.clear(),
                                          emailInputController.clear(),
                                          pwdInputController.clear(),
                                          confirmPwdInputController.clear()
                                        })
                                    .catchError((err) => print(err)))
                                .catchError((err) => print(err));
                          } else {
                            showDialog(
                                context: context,
                                builder: (BuildContext context) {
                                  return AlertDialog(
                                    title: Text("Error"),
                                    content:
                                        Text("The passwords do not match"),
                                    actions: <Widget>[
                                      FlatButton(
                                        child: Text("Close"),
                                        onPressed: () {
                                          Navigator.of(context).pop();
                                        },
                                      )
                                    ],
                                  );
                                });
                          }
                        }
                      },
                    ),
                  ),

1 Ответ

1 голос
/ 08 апреля 2020

Ваш код отлично работает на моем эмуляторе, поэтому я бы дважды проверил следующее, чтобы убедиться, что вы правильно настроили firestore Документация может быть найдена здесь. Также дважды проверьте ваши правила безопасности для базы данных Документация правила безопасности можно найти здесь.

если ваша база данных еще находится на этапе тестирования, ваши правила будут выглядеть примерно так:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    // This rule allows anyone on the internet to view, edit, and delete
    // all data in your Firestore database. It is useful for getting
    // started, but it is configured to expire after 30 days because it
    // leaves your app open to attackers. At that time, all client
    // requests to your Firestore database will be denied.
    //
    // Make sure to write security rules for your app before that time, or else
    // your app will lose access to your Firestore database
    match /{document=**} {
      allow read, write: if request.time < timestamp.date(2020, 5, 5);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...