Maison  >  Questions et réponses  >  le corps du texte

Valeur secrète non affichée

J'ai un SPA avec NextJs qui soumet un formulaire de contact à une feuille Google, le formulaire fonctionne bien localement, mais en production j'obtiens une erreur 500. Dans mon .envfichier j'ai ce qui suit :

NEXT_PUBLIC_GOOGLE_CLIENT_EMAIL=
NEXT_PUBLIC_GOOGLE_PRIVATE_KEY=
NEXT_PUBLIC_GOOGLE_SHEET_ID=

J'ai de vrais secrets dans mon .env.local dossier,

Voici mon submit.jsfichier

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, le secret est injecté via AWS et visible dans les journaux de surveillance du cloud.

Question 1 : dois-je inclure ces secrets dans mon Dockerfile ?

Question2, est-ce lié au CSP ? (Pas encore implémenté)

** Mise à jour J'ai essayé de définir la clé dans le fichier docker mais cela ne fonctionne pas J'ai également essayé d'ajouter csp avec le composant de classe à _document.js/ ou d'ajouter la configuration suivante, mais cela n'a pas bien fonctionné

** Mise à jour Dans l'environnement de production/développement, je ne parviens pas à lire les valeurs bien qu'elles soient injectées depuis le coffre-fort

P粉218775965P粉218775965241 Il y a quelques jours331

répondre à tous(1)je répondrai

  • P粉403804844

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

    J'ai découvert que NEXT_PUBLIC_ ne devrait pas être utilisé ici, après les avoir supprimés, cela a commencé à fonctionner. Mais un autre secret (GTM) qui devrait utiliser le préfixe ne se charge pas

    Mises à jour et solutions

    Il s'avère que j'avais besoin d'appeler server.js 并请求 env 变量: server.js comme ceci :

    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)
    }

    répondre
    0
  • Annulerrépondre