1 minute read

expree-session 라이브러리를 이용한 로그인 구현의 흐름을 살펴보자.

controller의 각 js파일들의 구현.

우선, server의 index.js에서 express-session을 사용해서

cookie 설정을 해준다.

domain, path를 지정해주고,

samesite, httpOnly, secure의 옵션을 알맞게 설정해준다.

Login

만약 올바른 ID와 PW를 전달 받는다면

(요청의 body로 ID와 PW가 전달, findOne으로 DB의 정보와 일치하는 경우)

요청의 session 객체에 cookie가 담겨 오고,

session 객체에 (DB에서 뽑아온 일치한 정보의)userId를 담아준다.

Logout

앞서 Login에서 로그인이 됐다면, session 객체에 userId를 담아주었다.

Logout에 요청이 들어왔을때, 요청의 session 객체에 userId가 있다면 (로그인이 된 상태)

상태코드 200을 응답하고, (로그인이 된 상태에서 로그아웃을 요청했으니 정상) session을 삭제한다 ( req.session.destroy() )

Logout 요청의 session 객체에 userId가 없다면 (로그인이 되지 않은 상태)

상태코드 400을 응답한다. (로그인이 되지 않은 상태에서 로그아웃을 요청했으니 오류)

Userinfo

마찬가지로 앞서 Login에서 로그인이 됐다면, session 객체에 userId를 담아주었다.

userinfo 요청이 들어옸을때, 요청의 session 객체에 userId가 있다면 (로그인이 된 상태)

상태코드 200을 응답학고, (로그인이 된 상태에서 유저 정보를 요청했으니 정상)

userinfo 요청의 session 객체에 userId가 없다면 (로그인이 되지 않은 상태)

상태코드 400을 응답한다. (로그인이 되지 않은 상태에서 로그아웃을 요청했으니 오류)

express-session 방식을 사용한 로그인 구현의 흐름을 살펴보았다.

server의 index에서 app.use(session())을 사용하며 session의 인자로

옵션 설정을 해주는것에 유의해야 할 듯 하다.

설정해주지 않으면 인증서 오류가 떴다.

또한, 후에 Client에서 Server와의 통신을 위해서 cors 설정 역시 필요하다.

CORS 설정 방법

app.use(cors({
  origin: 'origin 주소',
  methods: ['메소드', '메소드', ...],
  credentials: true
})));

controller에 들어와서는

로그인 요청으로 들어온 ID와 PW를 DB의 정보와 비교해

올바른 요청이면 req에 담겨서 오는 session 객체에 userId를 넘긴다.

이 부분이 중요하다. express-session을 사용했기 때문에

요청의 session 객체를 사용할 수 있다.

이 객체에 userId가 담겨있는지 없는지에 따라서 로그인, 로그아웃 상태를 판별해내고

추후 분기가 된다.

(userId의 존재 여부에 따라 발생하는 결과는 Logout, userInfo가 일맥상통)

Updated: