라우팅 설정 

패스워드를 암호화할 모듈과 jwt 모듈을 설치한다.

auth router를 설정한다.

src/router/auth.ts

AuthController에 signIn과 signUp 은 프로토타입을 미리 만들어 놓아야 에러가 안생긴다.

router 폴더에 index.ts에 auth를 추가한다.

src/router/index.ts

로그인과 로그아웃 구현

sign up은 이메일과 사용자 이름, 그리고 패스워드 3가지를 입력받아서 사용자 정보를 생성한다. role은 만일 클라이언트에서 지정한 role이 있다면 설정하고 없다면 ROLE_USER를 기본 role로 설정한다.

패스워드는 복호화할 수 없는 비대칭키로 암호화를 해야 하는데 앞에서 bcrypt 모듈을 설치했고 hashSync 함수를 이용해서 복호화 한다.

src/controller/AuthController.ts

이메일과 패스워드를 입력받아서 체크하는 로그인 함수를 구현한다.

해당 사용자 아이디(이메일)이 있는지를 체크한 후 패스워드가 맞는지 체크한다.

패스워드는 복호화가 불가능하므로 compareSync 함수를 사용하여 비교한다.

src/controller/AuthController.ts

jwt 토큰 생성

로그인시 jwt 토큰을 생성해서 리턴한다.  토큰 생성시 secret key와 expire 시간을 설정해야 하는데 .env 화일에 생성한다.

.env

registered claims인 jti에는 사용자 id를 넣었고 그 밖에 필요한 것들은 private claims 로 정의해서 넣었다. roles는 여러개가 가능하므로 스트링 배열 형태로 넣는다.