簡體   English   中英

Nuxt3 和 Firebase 雲 Function 托管:如何訪問私鑰 in.env 文件?

[英]Nuxt3 and Firebase Cloud Function Hosting: How to access private key in .env file?

我有一個 Nuxt3 應用程序,它使用“服務器路由”來創建用於前端的后端 API。

我有以下服務器路由:

server/api/imagekit/deleteFile.js

import ImageKit from 'imagekit'

const imagekit = new ImageKit({
  publicKey: useRuntimeConfig().public.imagekitPublicKey,
  privateKey: useRuntimeConfig().imagekitPrivateKey,
  urlEndpoint: useRuntimeConfig().public.imagekitBaseURL
})

export default defineEventHandler(async (event) => {
  // Purge cache of file from Imagekit
  // See detailed email from Rahul @ imagekit dated aug 31, 2022
  const body = await useBody(event)

  const response = await imagekit.purgeCache(body.url)
  return response
})

上面的代碼在本地運行良好,但是一旦我部署到 Firebase 托管,我在嘗試訪問 API deleteFile時收到以下服務器錯誤:

description: ""
message: "Missing privateKey during ImageKit initialization"
statusCode: 500
statusMessage: "Internal Server Error"
url: "/api/imagekit/deleteFile"

如果它與這個問題相關,這是我的 Nuxt 的nuxt.config.ts文件的代碼,其中列出了runtimeConfig屬性:

    runtimeConfig: {

        imagekitPrivateKey: '',
        public: {
            baseURL: process.env.NODE_ENV === 'production' ? 'https://example.com' : 'http://localhost:3000',
            imagekitBaseURL: 'https://ik.imagekit.io/example/',
            imagekitPublicKey: 'public_AdZM6u2+FvznG/LngYp7Ab3TJy4='
        }
    }

此外,我的firebase.json使用 2 個代碼庫用於功能:一個用於服務器,一個用於雲功能:

{
  "functions": [
    {
      "source": ".output/server",
      "codebase": "nuxt"
    },
    {
      "source": "functions",
      "codebase": "functions"
    }
  ],
  "hosting": [
    {
      "site": "XXX",
      "public": ".output/public",
      "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
      "cleanUrls": true,
      "rewrites": [
        {
          "source": "**",
          "function": "server"
        }
      ]
    }
  ]
}

我在項目根目錄中有一個包含 imagekitPrivateKey 值的.env文件。

我如何將此信息提供給 Firebase 托管部署,以便 ImageKit 使用私鑰正確初始化?

您可以從.env中的nuxt.config.ts讀取變量,如下所示:

export default defineNuxtConfig({
  runtimeConfig: {
    // Uppercase preferred in .env file
    imagekitPrivateKey: process.env.IMAGEKIT_PRIVATE_KEY,
  },
});

然后你可以在你的 API 路由中訪問它:

export default defineEventHandler((event) => {
  const { imagekitPrivateKey } = useRuntimeConfig();

  return { message: "success" };
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM