如何将Google应用程序凭据/机密添加到Vercel部署



我正在使用带有NextJS应用程序的Vercel Deployments。当我推送到master时,部署会自动运行,但我不想在GitHub中存储密钥。我的无服务器功能依赖于我的数据库。当在本地运行时,我可以简单地使用谷歌的默认身份验证凭据,但当部署到Vercel时,这是不可能的。因此,我创建了一个服务帐户,使服务器能够访问。

如何加载服务帐户凭据而不将其密钥本身推送到GitHub?

  • 我尝试按照本期中的描述添加密钥,但没有成功。

  • AFAIK在Vercel中设置环境变量没有帮助,因为Google环境变量需要一个路径/JSON文件(而不是简单的文本(。

您可以创建一个对象并将环境变量作为每个对象键的值,而不是使用JSON文件的路径。例如:

admin.initializeApp({
credential: admin.credential.cert({
client_email: process.env.FIREBASE_CLIENT_EMAIL,
private_key: process.env.FIREBASE_PRIVATE_KEY,
project_id: 'my-project'
}),
databaseURL: 'https://my-project.firebaseio.com'
});

然后,您可以在Vercel中的项目设置中添加环境变量。

我也遇到过这个问题,但使用了谷歌身份验证库。大多数谷歌库都提供了一种通过初始化时传递的选项对象添加凭据的方法。为了能够从谷歌表单或谷歌表单中获取信息,你可以这样做:

const auth = new GoogleAuth({
credentials:{
client_id: process.env.GOOGLE_CLIENT_ID,
client_email: process.env.GOOGLE_CLIENT_EMAIL,
project_id: process.env.GOOGLE_PROJECT_ID,
private_key: process.env.GOOGLE_PRIVATE_KEY      
},
scopes: [
'https://www.googleapis.com/auth/someScopeHere',
'https://www.googleapis.com/auth/someOtherScopeHere'
]
});

您可以将credentials.json文件中的信息复制到相应的环境变量中。只需注意,当您在localhost上工作时,您需要将private_key放在双引号中,但当您将其放入Vercel时,不应包含引号。

添加到@leerob的答案中,我发现在.env文件中的FIREBASE_PRIVATE_KEY环境变量周围加引号可以修复我在发出请求时不断收到的与PEM文件有关的错误。不过,对于标准firebase库的调用,我不需要在键周围引用任何引号。

这是我用来从我的应用程序访问谷歌云存储API的配置:

const { Storage } = require('@google-cloud/storage');
const storage = new Storage({ projectId: process.env.FIREBASE_PROJECT_ID,
credentials: { client_email: process.env.FIREBASE_CLIENT_EMAIL,
private_key: process.env.FIREBASE_PRIVATE_KEY_WITH_QUOTES
} 
})

最新更新