written by yechoi

[NestJS] 어드민 패널 설치: nestjs-admin 본문

Born 2 Code/Node Modules

[NestJS] 어드민 패널 설치: nestjs-admin

yechoi 2021. 7. 21. 20:22
반응형

nestjs에서 사용할 수 있는 admin panel 패키지는 대표적으로 두가지가 있다.

하나는 nestjs-admin, 또 다른 건 admin bro.

두 가지 모두 설치를 시도해보았고, 결론부터 말하면 adminbro를 사용하기로 했다.

이 중 nestjs-admin을 소개하고 설치하는 과정에서 겪은 에러와 해결방안을 정리해보려고 한다.

nestjs-admin

공식적인 어드민 패널 같아보이는 이 패키지는 사실 공식 패키지는 아니다. Theodo라는 영국회사에서 만든 것.

현재(21.07) 기준, npm 페이지에서 확인해보면 latest는 8개월 전이다. 최근 들어서는 관리가 되지 않는 것으로 보인다. 소개문을 보면 Django Admin을 본따서 제작했다고 한다.

설치는 어렵지 않다. NestJS를 위해 설치된 패키지이므로, 일단은 공식 문서에서 설명하는 대로 설치하는 것으로 충분하다. 공식문서는 여기.

 

NestJS Admin · A generic administration interface for TypeORM entities

A generic administration interface for TypeORM entities

nestjs-admin.com

 

에러 상황

설치를 하고 나서 로그인을 할 때 문제가 발생했는데, 아무리 올바르게 username과 password를 입력해도 이런 오류가 뜬다.

비슷한 issue가 많은 버그인데, 해결을 안하고 있다. 해당 쓰레드에서 유저들이 자체적인 해결방안을 찾아놓은 게 있다. password를 직접 해쉬한 값으로 바꿔치기 하면 된다는 것.

정리하자면 superuser를 사용하려면 다음과 같은 과정을 거쳐야 한다.

1. 문서에서처럼 typeorm에 migrate

npx ts-node node_modules/.bin/typeorm migration:generate -n "create-admin-user"
npx ts-node node_modules/.bin/typeorm migration:run

2. `npx nestjs-admin createAdminUser`로 adminUser 생성

3. https://bcrypt-generator.com/ 여기서 원하는 비밀번호를 암호화한다

4. DB에 들어가서 adminUser에 암호화한 비밀번호를 직접 넣어준다. 다음은 sql 쿼리문.

update "adminUser" set password = '3에서 직접 해쉬한 비밀번호' where username = '2에서 생성한 adminUser의 username';

지금 진행중인 프로젝트에서는 docker-compose를 사용하는데, 이 과정을 스크립트로 자동화할 필요가 있다. 매우 번거로운 부분이지만 할 수는 있는데, 결국 다른 에러가 더 나타나면서 사용하기를 포기했다.

비밀번호를 직접 해쉬한 값으로 바꿔놓았는데도, 로그인을 시도했을 때 /admin으로 이동이 안된다. /admin/login에서 admin으로 리다이렉트돼었다가 다시 /admin/login으로 라다이렉트 된다. 인증 토큰이 유지가 안되는 건지...

이 경우는 비슷한 에러를 겪은 사람도 없어서 문제 해결이 쉽지가 않았다. 그래서 결국 adminbro로 이동하기로 결정.

그나마 최근까지(4개월전) 관리가 되던 패키지이고, adminbro는 주 7000회, @admin-bro/nestjs는 주 750회 정도 다운로드 되고 있어 더 사용률이 높다.

반응형