제출할 폴더 이름 : | ex03 |
제출할 파일 이름 : | Express 프로젝트에 필요한 모든 파일 |
사용 가능한 외부 모듈 : | express, jsonwebtoken, passport, passport-local, bcrypt, passport-jwt, sequelize, validator, dotenv, nodemon, Expressjs team에서 지원하는 middleware |
참고사항 : | 없음 |
🍪쿠키나라🍪
에서 단순하게 여행을 오는 것만이 아니라 이민을 오는 것을 허용하게 되었습니다!
지금까지 여권관련 업무를 완벽하게 수행하였기 때문에 새로운 이민 관련 시스템을 구축하는데에도 담당자로 선정이 되셨습니다!
여러분들은 아래의 사항을 지켜서 구현해 주세요!
- JWT SECRET KEY는 code 내부에 raw로 작성되어 있으면 안됩니다.
- expiraton을 설정 하여야 합니다.
- 인증유저를 구분하는 로직은 middle ware로 구현을 해야 합니다.
- jwt의 payload 내부에는 불필요한 정보와 민감한 정보는 없어야 합니다.
- jwt의 payload 내부에는 user에 대해서 구분 할 수 있는 값이 포함되어야 만 합니다.
- passport-jwt 검증하는 로직에서
req.user
에 해당 user의 DB object가 주입되어야 합니다. - Token 전달 방식은
Bearer Authentication
를 이용합니다. - user의 password는 반드시
bcrypt
모듈을 통해 Hash 값을 저장시켜야 합니다. bcrypt
의 saltRounds 는 적절한 값으로 지정되어 있어야 합니다.- DB는 MySQL(MariaDB) 를 사용하여야 합니다.
- DB 모델은 아래와 같은 구조로 만들어야 합니다.
- user의 name password는 아래의 조건으로 검증을 해야 합니다.
- username은 영문 소문자와 숫자만 허용. 6글자 이상.
- password는 영문 대문자,소문자,숫자가 각각 있어야하며, 8글자 이상.
- Primary key는 모두 auto increment로 작동되어야 합니다.
- 아래의 API 명세에 있는 기능을 구현하되 출입국 여부는 신경쓰지 않아도 됩니다!
- 핸들링 되지 않은 서버 오류는 없어야 합니다.
- URL
/immigrate
- 새로운 시민을 생성하는 ENDPOINT
- Method
POST
- Params
- None
- Query
- None
- Body - json
name
- type: string
password
- type: string
passwordConfirm
- type: string
- Header
- None
- Cookies
- None
- 이민 성공시
- body
{ "msg" : "🍪 쿠키의 세상의 주민이 되신 걸 환영 합니다~! 🍪" }
- body
- 잘못된 요청 시
- body
{ "msg" : "🍪 쿠키의 세상의 주민이 되실 수 없습니다. 🍪", "reason": [ "password 검증 실패" // 해당하는 오류 항목 들을 추가 해주세요. ] }
- body
- URL
/token
- token를 발급받는 ENDPOINT
- Method
POST
- Params
- None
- Query
- None
- Body - json
name
- type: string
password
- type: string
- Header
- None
- Cookies
- None
- 발급 성공시
- body
{ "msg" : "🍪 신분증 발급 성공! 🍪", "token" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjQyNDI0MjQyNDIsInVzZXJuYW1lIjoiamFlc2tpbSJ9.BMexiK1IQG8CQ8ckiI3kB3JsXArhZnAEZI0NFFYnCs4" }
- body
- 잘못된 요청 시
- body
{ "msg" : "🍪 신분증 발급 실패! 🍪", "reason": [ "password 검증 실패" // 해당하는 오류 항목 들을 추가 해주세요. ] }
- body
- URL
/me
- 해당 사용자의 출입국 정보를 반환하는 ENDPOINT
- Method
GET
- Params
- None
- Query
- None
- Body
- None
- Header
Authorization
bearer <token>
- Cookies
- None
- 정상응답
- body
{ "msg" : "🍪 <name>님의 출입국 정보! 🍪", "data" : { "entry" : [ "2021-07-18T18:23:26.260Z" ], "exit" : [ "2021-07-18T18:23:26.260Z" ] } }
- body
- 잘못된 요청 시
- body
{ "msg" : "🍪 출입국 조회 실패! 🍪", "reason": [ "token 검증 실패" // 해당하는 오류 항목 들을 추가 해주세요. ] }
- body
- URL
/entry
- 해당 사용자의 입국정보를 남기는 ENDPOINT
- Method
GET
- Params
- None
- Query
- None
- Body
- None
- Header
Authorization
bearer <token>
- Cookies
- None
- 정상응답
- body
{ "msg" : "🍪 <name>님의 입국이 정상적으로 처리되었습니다! 🍪" }
- body
- 잘못된 요청 시
- body
{ "msg" : "🍪 쿠키 나라 입국 실패! 🍪", "reason": [ "token 검증 실패" // 해당하는 오류 항목 들을 추가 해주세요. ] }
- body
- URL
/exit
- 해당 사용자의 출국정보를 남기는 ENDPOINT
- Method
GET
- Params
- None
- Query
- None
- Body
- None
- Header
Authorization
bearer <token>
- Cookies
- None
- 정상응답
- body
{ "msg" : "🍪 <name>님의 입국이 정상적으로 처리되었습니다! 🍪" }
- body
- 잘못된 요청 시
- body
{ "msg" : "🍪 쿠키 나라 출국 실패! 🍪", "reason": [ "token 검증 실패" // 해당하는 오류 항목 들을 추가 해주세요. ] }
- body