Если вы используете Firebase-tools в качестве модуля, вы можете получить токен обновления пользователя, выполнив
import { getGlobalDefaultAccount } from "firebase-tools/lib/auth.js";
const account = getGlobalDefaultAccount();
console.info(account.tokens.refresh_token);
Я ищу способ использовать токен обновления вошедшего в систему пользователя (firebase-tools) в качестве учетных данных для Firebase Admin SDK. Что-то вроде:
import { initializeApp, refreshToken } from "firebase-admin/app";
const admin = initializeApp({
credential: refreshToken(account.tokens.refresh_token),
});
Я попробовал запустить приведенный выше фрагмент кода, но похоже, что метод refreshToken
интерпретирует account.tokens.refresh_token
как путь к файлу (возможно, потому, что это строка). Поэтому я попытался изменить его на такой объект:
import { initializeApp, refreshToken } from "firebase-admin/app";
const admin = initializeApp({
credential: refreshToken({
refresh_token: account.tokens.refresh_token,
}),
});
Однако теперь он выдает ошибку о том, что отсутствуют свойства client_secret
и client_id
, которых нет у объекта account
. AFAIK, они есть только у сервисных учетных записей.
🤔 А знаете ли вы, что...
Node.js позволяет выполнять JavaScript на стороне сервера, а не только в браузере.
Итак, я понял, что это возможно, используя GOOGLE_APPLICATION_CREDENTIALS
.
В Firebase Tools есть метод getCredentialPathAsync()
, который, насколько я могу судить, находит файл учетных данных где-то на вашем компьютере, а если его нет, он генерирует файл учетных данных, а затем возвращает путь. Вы можете установить GOOGLE_APPLICATION_CREDENTIALS
в местоположении этого файла.
import { getGlobalDefaultAccount } from "firebase-tools/lib/auth.js";
import { getCredentialPathAsync } from "firebase-tools/lib/defaultCredentials.js";
import { initializeApp } from "firebase-admin/app";
async function main() {
const account = getGlobalDefaultAccount() // Get the logged in account
const credPath = await getCredentialPathAsync(account) // Get the path
process.env.GOOGLE_APPLICATION_CREDENTIALS = credPath // Set the environment variable
const firebaseApp = initializeApp({
projectId: "PROJECT_ID",
}) // Initialize the Admin SDK
}
main()