Не удалось получить доступ к Firebase Firestore из облачных функций - PullRequest
1 голос
/ 03 октября 2019

Я хотел бы записать некоторые данные в Firebase Firestore из Cloud Functions, однако, это не удалось, и я получил следующее сообщение об ошибке.

Missing or insufficient permissions.

Так как это выглядит проблемой правил безопасностиЯ изменил правило безопасности Firestore, как показано ниже. Это должно быть самое простое правило безопасности.

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}

Кроме того, я жду несколько минут, потому что для применения нового правила безопасности требуется время. Тем не менее, все еще не удалось ...

В соответствии с кодом функций Cloud.

const admin = require('firebase-admin');
admin.initializeApp()
const firestore = admin.firestore();


exports.sampleAPI = functions.https.onRequest((request, response) => {
    const text = request.body.text

    writeText(text).then(value => {
        console.log("==== Operation DONE ====")
        response.status(200).send("OK")
        return null
    }).catch(error => {
        console.error("xxxxxx Operation FAILED xxxxxxx")
        console.error(error)
        response.status(500).send(error)
    })
}

async function writeText(text) {
    const textRef = firestore.collection('texts')

    return textRef.add({
        text: text,
    }).then(docRef => {
        const id = docRef.id
        return id
    }).catch(error => {
        throw error
    })
}

Как я могу решить эту проблему ??

1 Ответ

1 голос
/ 03 октября 2019

Возможно, вы захотите просмотреть эту документацию .

2 вещи о вашем подходе:

1) Синтаксис строки разрешения в правиле безопасности неПосмотрите правильно для того, что вы пытаетесь сделать, поскольку в нем отсутствует предложение if <condition>, на основе примеров на этой странице выше должно читаться:

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

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

2) На этой странице также ясно, что облачные функции не полагаются на правила безопасности для базы данных и вместо этого зависятв IAM, поэтому вы можете проверить идентичность, выполняемую функцией, а также роли, которыми обладает эта идентичность. (Подробнее здесь ). Однако, как правило, здесь должны работать настройки по умолчанию (особенно если вы используете только Firebase, а не обычную облачную консоль Google).

И последнее: в коде функций вам никогда не требуется модуль функций. Вам также необходимо включить строку, подобную этой:

const functions = require('firebase-functions');

Это, конечно, должно произойти сбой во время развертывания с ошибкой типа «ReferenceError: функция не определена», так как JavaScript не будет анализироваться.

Если это не поможет, предоставьте больше информации об ошибке, которую вы получаете (когда она генерируется - при развертывании? Когда функция выполняется? Есть ли какая-либо трассировка стека и т. Д.).

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