Rumah  >  Soal Jawab  >  teks badan

Nilai rahsia tidak ditunjukkan

Saya mempunyai SPA dengan NextJs yang menyerahkan borang hubungan ke Helaian Google, borang tersebut berfungsi dengan baik secara tempatan, tetapi dalam pengeluaran saya mendapat ralat 500. Dalam fail .env saya, saya mempunyai yang berikut:

NEXT_PUBLIC_GOOGLE_CLIENT_EMAIL=
NEXT_PUBLIC_GOOGLE_PRIVATE_KEY=
NEXT_PUBLIC_GOOGLE_SHEET_ID=

Saya mempunyai rahsia sebenar dalam fail .env.local saya,

Ini ialah submit.js fail

saya
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, rahsia disuntik melalui aws dan boleh dilihat dalam log pemantauan awan.

Soalan 1, adakah saya perlu memasukkan rahsia ini dalam Dockerfile saya?

Soalan2, adakah ia berkaitan dengan CSP? (Belum dilaksanakan)

** Kemas kini Saya cuba menetapkan kunci dalam fail docker tetapi ia tidak berfungsi Juga cuba menambah csp dengan komponen kelas ke _document.js/ atau menambah konfigurasi seterusnya tetapi ia tidak berfungsi dengan baik

** Kemas kini Dalam persekitaran pengeluaran/pembangunan saya tidak dapat membaca nilai walaupun ia disuntik dari peti besi

P粉218775965P粉218775965240 hari yang lalu327

membalas semua(1)saya akan balas

  • P粉403804844

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

    Saya mendapati bahawa NEXT_PUBLIC_ tidak sepatutnya digunakan di sini, selepas mengeluarkannya, ia mula berfungsi. Tetapi rahsia lain (GTM) yang sepatutnya menggunakan awalan adalah tidak memuatkan

    Kemas kini dan Penyelesaian

    Ternyata saya perlu menghubungi server.js 并请求 env 变量: server.js seperti ini:

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

    balas
    0
  • Batalbalas