如何在 Google Cloud Platform 中以编程方式管理租户

How to manage tenants programatically in Google Cloud Platform

我正在编写后端服务来管理我在 gcp 中的租户。具体来说,我希望能够 create/delete 并在我的节点服务器上列出租户。

Firebase admin-sdk 应该能让我这样做。当我尝试 运行 时,出现此错误:

Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "Error fetching access token: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal. Error code: ENOTFOUND".

我按照 this documentation 设置安装了 admin sdk。 (尝试 windows 和 linux,使用环境变量) 我使用 this documentation(获取现有租户)

这是我的代码:

var admin = require('firebase-admin');
var app = admin.initializeApp({
    credential: admin.credential.applicationDefault(),
    projectId: 'myProject'
});
admin.auth().tenantManager().getTenant("myTenant")
    .then((tenant) => {
        console.log(tenant.toJSON());
    })
    .catch((error) => {
        // Handle error.
        console.log(error.message)
    });


const someOtherStuff = () =>...

module.exports = {
    someOtherStuff
}

编辑:我运行使用 Express 在本地节点服务器上使用此代码。我正在使用 Windows 台计算机和 Linux 台计算机。结果在两个系统上是一样的。

我能够通过更改初始化来解决该问题。我没有使用环境变量,而是直接使用服务帐户密钥文件,如 here

所述

我如何使用它的一些示例代码:

var admin = require('firebase-admin');
var {getAuth} = require('firebase-admin/auth');
var serviceAccount = require('/path/to/serviceAccountKey.json');

// Initialize the default app using seriveAccount instead of environment variables
var app = admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
});
   

const createTenant = async (tenantName) => getAuth(app).tenantManager().createTenant({
    displayName: tenantName,
    emailSignInConfig: {
        enabled: true,
        passwordRequired: true, // Email link sign-in enabled.
    }
}).then((createdTenant) => {
    return createdTenant.toJSON();
}).catch((error) => {
    console.log("tenant could not be created. " + error.message);
});

//some other stuff...

module.exports = {
    createTenant,
    someOtherStuff,
}