Rumah > Soal Jawab > teks badan
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
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粉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) }