next.js 将Google凭据链接到vercel

4dbbbstv  于 2022-11-23  发布在  Go
关注(0)|答案(1)|浏览(180)

我尽了最大努力想自己解决这个问题,但我完全错过了一些东西。
我正在使用NextJS 12和Google Cloud Translate的API来转换按钮上的一个单词。在本地它工作得很好,但是一旦我试图部署到vercel,权限/密钥就在某个地方被搞砸了。
在本地,我有我的key.json,它是从我的服务帐户获得的。它就在我的项目的根目录中。我有我的.env.local文件,它引用了那个密钥文件。它看起来像这样
GOOGLE_APPLICATION_CREDENTIALS=./<projectid&key>.json
但是当我尝试翻译时,我遇到了一个错误。'Request failed with status code 500'
我的翻译端点看起来像这样,我几乎是从谷歌的小教程复制。

import { NextApiRequest, NextApiResponse } from "next";

export default async (req: NextApiRequest, res: NextApiResponse) => {
  const translationClient = new TranslationServiceClient();

  const projectId = <myprojectID>;
  const location = "global";

  async function translateText() {
    const request = {
      parent: `projects/${projectId}/locations/${location}`,
      contents: [req.body.text],
      mimeType: "text/plain",
      sourceLanguageCode: "en",
      targetLanguageCode: "es",
    };

    const [response] = await translationClient.translateText(request);

    res.json(response.translations[0].translatedText);
  }
  translateText();
};

"我尝试过的事"
1.把JSON作为一个单独的环境变量放在vercel上,基本上就是GOOGLE_APPLICATION_CREDENTIALS和key.json文件.
1.试着把所有的都放在一行。
1.试着把钥匙拆开,并把它变成这样的格式:

GOOGLE_ACCOUNT_TYPE=service_account
GOOGLE_PROJECT_ID=project11111
GOOGLE_PRIVATE_KEY_ID=11111111111111
etc

然而,我也不打算让这个方法在本地工作。4.保留.env.local到key.json的路径,只上传key.json本身。
这些都不起作用,我很困惑。

我查看过的资源

  1. https://github.com/vercel/vercel/issues/749#issuecomment-715009494
    1.将firebase privateKey作为Heroku配置变量时的转义问题
  2. https://daveteu.medium.com/call-google-cloud-function-from-vercel-serverless-hosting-1b1688bb462c
    我试着把这些应用到我的情况中,但是我不明白。我真的很感激任何帮助!非常感谢。
qxsslcnc

qxsslcnc1#

在四处寻找了几天后,我找到了一个有效的解决方案。
我使用类似的命令将keys.json转换为base64字符串。https://gist.github.com/tomi/0675e58919af4554b198cee3f84405e5
然后使用此处找到的方法。https://github.com/orgs/vercel/discussions/219
我把base64字符串放在.env文件的一行中进行检查,然后对Vercel环境变量进行了同样的检查,结果成功了。

相关问题