Как получить request.auth.uid перед чтением или записью в firestore с помощью flutter

# #flutter #google-cloud-firestore #firebase-security

Вопрос:

Я использую firestore для приложения для чата с flutter. и у меня есть проблема, что чат иногда не может быть отправлен или получен.

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

Вызывающий абонент не имеет разрешения на выполнение указанной операции.. Ошибка, выданная null

Эта ошибка означает, что он застрял в системе безопасности firestore.

Мое правило пожарной безопасности гласит, что:

 rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    function signedIn() {
      return request.auth.uid != null;
    }
    match /chats/{chatId} {
      allow create: if signedIn();
      allow read: if signedIn() amp;amp; ( resource.data.userUid == request.auth.uid ||  resource.data.consultantUid == request.auth.uid );
    }
  }
}
 

Я думаю, что таково значение ‘request.auth.жидкости» не существует.

Поэтому я хочу проверить, соответствует ли значение ‘request.auth.жидкость действительно исчезла. Но я не знаю, как получить » запрос.авт.uid’ перед чтением или записью с помощью firestore с помощью flutter.

Мой код флаттера таков(с использованием cloud_firestore):

 FirebaseFirestore.instance
        .collection('chats')
        .doc(uid)
        .set(chat.toMap());
  }
 

Пожалуйста, дайте мне знать, если у вас есть какие-либо другие советы о том, как решить эту проблему

Спасибо, что прочитали мой вопрос.

Комментарии:

1. Чтобы проверить значение request.auth.uid в вашем коде, вы бы использовали FirebaseAuth.instance.currentUser , как показано здесь: firebase.flutter.dev/docs/auth/usage . Если вы напечатаете это значение непосредственно перед доступом к базе данных, у вас будет больше шансов получить это значение, поскольку ваши правила безопасности также видят его.