Разрешение FireStore отклонено по базовым c запросам Xamarin Forms - PullRequest
1 голос
/ 03 марта 2020

Я борюсь с этой проблемой уже несколько дней, и я не добиваюсь большого прогресса, любая помощь будет оценена. Я новичок в FireStore, но мне действительно нравятся возможности, которые он предлагает. Мне успешно удалось получить базовые c документы из Android и iOS приложений, используя Plugin.CloudFirestore и Xamarin.Forms.

Однако мне нужны некоторые фоновые сервисы, такие как настройка данных и т. Д. c, и я должен иметь возможность подключаться к FireStore через обычное старое C# настольное приложение. Поэтому я следовал краткому руководству по началу работы, Nuget'ed Google.Cloud.Firestore, установил переменную среды, и независимо от того, как я пробую код, я получаю «PERMISSION_DENIED: отсутствуют или недостаточны разрешения».

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

Помощь будет очень полезна, прежде чем я начну стучать головой по столу: -)

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        Task<string> task = Task.Run<string>(async () => await GetUserName());
        var x = task.Result;
        return ;

    }

    private async Task<string> GetUserName()
    {
        string projectId = "matchesJson";
        FirestoreDb db = FirestoreDb.Create(projectId);
        string retVal = "";

        try
        {
            CollectionReference col = db.Collection("users");
            // Exception thrown on next line
            QuerySnapshot snapshot = await col.GetSnapshotAsync();
            // get some data
            retVal = "";
        }
        catch (Exception e)
        {
            retVal =  e.Message;
        }
        return retVal;
    }

}

---- РЕДАКТИРОВАТЬ ПРАВИЛА ДОБАВЛЕНИЯ ------- - Сегодня 3 марта 2020 г. -

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, 3, 28);
    }
  }
}

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Я нашел проблему. Это не очень понятно в документации, но при использовании служебной учетной записи необходимо добавить разрешение к учетной записи отдельно. Это можно сделать в консоли Google, выполнив поиск личности и применив правильное разрешение. На данный момент я предоставил «владельца проекта» только для этого заказа C, но, возможно, есть более детальное разрешение.

Спасибо за чтение и спасибо за комментарии 'ralemos'.

0 голосов
/ 03 марта 2020

Как вы можете проверить в этой документации , вы можете видеть, что правила по умолчанию запрещают кому-либо доступ на чтение / запись, и, поскольку вы сказали, что не меняли их, это, вероятно, то, что вызывающий проблему.

Теперь правила безопасности для вас должны быть настроены на что-то похожее на это:

match /databases/{database}/documents {
  match /{document=**} {
    allow read, write: if false;
  }
}

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

allow read, write: if true;

Это позволит каждому получить к нему доступ. Если вы хотите разделить доступ, вам нужно будет выяснить, какие условия предоставляют доступ в соответствии с потребностями вашего приложения, и упомянутая ранее документация также должна помочь.

Дайте мне знать, если это работает.

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