Подтвердить что ты не робот

Облачные функции Firebase - createCustomToken

Использование новых облачных функций Firebase в сочетании с администратором sdk.

Я хочу использовать функцию admin.auth(). createCustomToken(). При вызове этой функции появляется сообщение об ошибке

Error: createCustomToken() requires a certificate with "private_key" set.
    at FirebaseAuthError.Error (native)
    at FirebaseAuthError.FirebaseError [as constructor] (/user_code/node_modules/firebase-admin/lib/utils/error.js:25:28)
    at new FirebaseAuthError (/user_code/node_modules/firebase-admin/lib/utils/error.js:90:23)
    at FirebaseTokenGenerator.createCustomToken (/user_code/node_modules/firebase-admin/lib/auth/token-generator.js:62:19)
    at Auth.createCustomToken (/user_code/node_modules/firebase-admin/lib/auth/auth.js:89:37)
    at /user_code/index.js:29:26
    at process._tickDomainCallback (internal/process/next_tick.js:129:7)

Как настроить функции облака для использования private_key?

admin.initializeApp(functions.config().firebase);
4b9b3361

Ответ 1

К сожалению, метод createCustomToken() требует наличия закрытого ключа для извлечения пользовательских токенов, который в настоящее время недоступен с учетными данными по умолчанию (что происходит для Учетные данные приложения по умолчанию). Как указано в Создайте пользовательские маркеры, используя SDK Firebase Admin, вам нужно предоставить учетные данные для создания пользовательских токенов.

Вы можете создать сертификат, необходимый для этих учетных данных, следуя инструкциям в Добавить Firebase в ваше приложение. После того, как у вас есть ключ JSON файла, вам нужно его загрузить в Cloud-функции для Firebase.

Вы можете сделать это, сохранив файл ключа JSON в папке /functions как service-account.json. Затем в файле, где вы определяете свои функции, используйте admin.credential.cert() для инициализации SDK администратора, например:

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

var serviceAccount = require("./service-account.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
});

Для полного примера того, как это сделать, с более подробными инструкциями и образцом кода, проверьте знак Instagram в примере.

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