Nest.js Как отдавать HTML страницу только по Get запросу, защитив его Гуардом?
Я пытаюсь сделать так, чтоб страница с админкой была недоступна кому попало. ServeStaticModule раздает всем всё. Меня это поведение везде устраивает, кроме ситуации с админкой. Я хотел бы страницу с авторизацией в админку давать всем, кто заходит на /admin, но вот всё остальное чтоб отдавалось клиенту только после ввода логина и пароля. Интуитивно я думаю, что нужно сделать контроллер, защитить его гуардом, и если запрос поошел, то отдавать html страницу. Но как это сделать?
Ответы (1 шт):
Мой способ реализации
В вашем случае было бы неплохо вынести API админ-панели в отдельное приложение Nest.
$ nest generate app admin-panel
Подобным способом построено одно из моих приложений.
Я пришёл к этому, когда столкнулся с похожей проблемой, только в моём случае мне была нужна авторизация в CRM, но не нужна в admin-panel (авторизацию в админ панели планировалось сделать при помощи средств NGINX, так как в там не предусмотрено никакой регистрации)
Ваш способ реализации
Можно реализовать подобное поведение несколькими способами:
- Использовать шаблонизаторы и в контроллерах отдавать контент при помощи
@Render(). - Также отдавать контент в контроллерах при помощи
res.sendFile().
Таким образом, вы сможете прикрепить к этим контроллерам Guards.
В случае с ServeStaticModule я не нашёл более удобного решения.
Но вообще, конечно, использовать Nest для раздачи статического контента достаточно странно и не удобно, как по мне.