РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnuPmApSC 75 of 84 menu
◀ ▶

Секретная настройка в Nuxt

В настройках проекта есть значения, которые нельзя показывать браузеру: ключи, токены, пароли. Их хранят в runtimeConfig без блока public. Такие поля доступны на сервере, но не попадают в клиентский бандл.

Публичная настройка apiBase уже могла встречаться в проекте: её видит и страница. Секрет apiSecret объявляют отдельно, чтобы его знал только сервер.

В nuxt.config.ts добавим поле верхнего уровня runtimeConfig:

export default defineNuxtConfig({ runtimeConfig: { apiSecret: '', }, });

Значение для разработки задают в .env. Префикс NUXT_ обязателен, имя настройки пишут заглавными буквами:

NUXT_API_SECRET=dev-token

В API-обработчике настройки читают через useRuntimeConfig. Если секрет не задан, можно прервать работу функцией createError с кодом 500. Секрет не возвращают в JSON: иначе он сразу утёк бы клиенту. Страницы apiSecret не читают.

export default defineEventHandler(() => { const config = useRuntimeConfig(); if (!config.apiSecret) { throw createError({ statusCode: 500, statusMessage: 'Secret is not configured', }); } return { status: 'ok', }; });

При пустой настройке клиент получит ошибку. При заданном NUXT_API_SECRET ответ содержит только status, без значения токена. При желании тот же apiSecret можно сравнить с заголовком запроса, но главное - читать его только здесь, на сервере.

Сделайте API-обработчик, который отказывается работать, если apiSecret в конфигурации пустой.

Проверьте поведение с заданным NUXT_API_SECRET и после его удаления из .env: должна появиться серверная ошибка.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить