Хранение токена Sanity в секрете с Now не работает
Я пытаюсь сохранить токен Sanity в секрете при развертывании моего проекта с Now, но, похоже, все это не работает. Вот моя ситуация:
Я добавил свой токен Sanity в качестве секрета для CLI (я назвал его
sanity_token
).Я добавил
now.json
файл в корне моего проекта:{ "version": 1, "build": { "env": { "SANITY_TOKEN": "@sanity_token" } }, "env": { "SANITY_TOKEN": "@sanity_token" } }```
Я использовал переменную в
sanity.js
как:... token: process.env.SANITY_TOKEN, ...
... но, похоже, не работает ни при запуске npm run dev
ни при развертывании с now
, Страница загружается и ошибок нет, но я не получил никакого контента, потому что до Sanity невозможно добраться. Похоже, секрет отсутствует. Что я могу делать не так?
0 ответов
Для этого вы можете использовать конфигурацию времени выполнения Next. Поскольку вы имеете дело с секретным токеном, вы захотите использовать serverRuntimeConfig
это доступно только на стороне сервера:
// next.config.js
module.exports = {
serverRuntimeConfig: {
// either inline or get from env variable
SANITY_TOKEN: process.env.SANITY_TOKEN,
SANITY_TOKEN: "alternatively stored in this file"
}
}
В вашей серверной части вы можете получить доступ SANITY_TOKEN
нравится:
// server-side only
import getConfig from "next/config";
const { SANITY_TOKEN } = getConfig().serverRuntimeConfig;
Однако этот код будет аварийно завершен, если вы попытаетесь запустить его на стороне клиента, поэтому вам нужно будет убедиться, что он работает только на сервере(см. Также эту проблему).
Обратите внимание, что ваш now.json
файл позволяет вам контролировать, какие переменные env используются при развертывании в ZEIT Now, но не влияет на ваши локальные сборки (такие как $ npm run dev
а также $ npm run build
).
Таким образом, вы должны установить переменную env другим способом при локальном запуске Next.