suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Geheimwert nicht angezeigt

Ich habe ein SPA mit NextJs, das ein Kontaktformular an ein Google Sheet sendet. Das Formular funktioniert lokal einwandfrei, aber in der Produktion erhalte ich einen 500-Fehler. In meiner .env-Datei habe ich Folgendes:

NEXT_PUBLIC_GOOGLE_CLIENT_EMAIL=
NEXT_PUBLIC_GOOGLE_PRIVATE_KEY=
NEXT_PUBLIC_GOOGLE_SHEET_ID=

Ich habe tatsächlich Geheimnisse in meiner .env.local Akte,

Das ist meine submit.jsDatei

import { google } from 'googleapis'
require('dotenv-flow').config()

export default async function handler(req, res) {
  if (req.method !== 'POST') {
    return res.status(405).send('Only POST requests are allowed!')
  }
// log to see the secret which are visible in local  
  console.log('process.env', process.env)
 console.log(
      'email process with error ',
      process.env.NEXT_PUBLIC_GOOGLE_CLIENT_EMAIL
    )
  const body = req.body

  try {
    const auth = new google.auth.GoogleAuth({
      credentials: {
        client_email: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_EMAIL,
        private_key: process.env.NEXT_PUBLIC_GOOGLE_PRIVATE_KEY?.replace(
          /\n/g,
          '\n'
        ),
      },
      scopes: [
        'https://www.googleapis.com/auth/drive',
        'https://www.googleapis.com/auth/drive.file',
        'https://www.googleapis.com/auth/spreadsheets',
      ],
    })
    const sheets = google.sheets({
      auth,
      version: 'v4',
    })

    const submittedAt = new Date().toUTCString()

    const response = await sheets.spreadsheets.values.append({
      spreadsheetId: process.env.NEXT_PUBLIC_GOOGLE_SHEET_ID,
      range: 'A1:F1',
      valueInputOption: 'USER_ENTERED',
      requestBody: {
        values: [
          [
            body.name,
            body.company,
            body.product,
            body.email,
            body.phone,
            submittedAt,
          ],
        ],
      },
    })

   
    return res.status(201).json({
      data: response.data,
    })
  } catch (error) {
    console.log(
      'email process with error ',
      process.env.NEXT_PUBLIC_GOOGLE_CLIENT_EMAIL
    )
// the log fo r this error is down below
    console.log('error.code', error)
    return res.status(error.code).send({ message: error.message })
  }
}

error.code 错误:传入的 JSON 对象不包含 client_email 字段 error.code 错误:传入的 JSON 对象不包含 client_email 字段

Ps, das Geheimnis wird über AWS eingeschleust und ist in Cloud-Überwachungsprotokollen sichtbar.

Frage 1: Muss ich diese Geheimnisse in meine Docker-Datei aufnehmen?

Frage 2: Hängt es mit CSP zusammen? (Noch nicht implementiert)

** Update Ich habe versucht, den Schlüssel in der Docker-Datei festzulegen, aber es funktioniert nicht Ich habe auch versucht, CSP mit Klassenkomponente zu _document.js/ hinzuzufügen oder die nächste Konfiguration hinzuzufügen, aber es hat nicht gut funktioniert

** Update In der Produktions-/Entwicklungsumgebung kann ich die Werte nicht lesen, obwohl sie aus dem Tresor eingefügt werden

P粉218775965P粉218775965320 Tage vor400

Antworte allen(1)Ich werde antworten

  • P粉403804844

    P粉4038048442024-02-22 11:46:28

    我发现 NEXT_PUBLIC_ 不应该在这里使用,删除它们后它开始工作。但另一个应该使用前缀的秘密(GTM)没有加载

    更新及解决方案

    事实证明,我需要调用 server.js 并请求 env 变量: server.js 是这样的:

    export default function handler(req, res) {
      const publicEnv = Object.keys(process.env)
        .filter((key) => key.startsWith('NEXT_PUBLIC'))
        .reduce((acc, key) => {
          acc[key] = process.env[key]
          return acc
        }, {})
    
      res.status(200).json(publicEnv)
    }

    Antwort
    0
  • StornierenAntwort