본문 바로가기

WebApp/Node.js-session

Node.js-session with express 2

1.login 링크 구현 및 /auth/login page 생성

login 제출하면 /auth/login_process 로 이동

 

2.login_process 구현

1.아이디 비번 데이터객체(authData) 생성

이때 비밀번호의 소스코드는 바깥쪽으로 뺼 수 있는 방법을 모색해야하며 해쉬 또는 비밀번호 암호화

를 통하여 보안을 신경써야 한다

2. login_process 구현

3.애플리케이션에 접속할때 마다 세션이 생성되도록 세션 미들웨어 설치

 

4. 어떤 데이터를 세션으로 저장할 것인지 auth.js에서 결정

*보통 이메일이나 비밀번호는 데이터세션으로 저장하지 않는다 

로그인을 했는지를 알려주는 정보와 페이지에 접근할때 마다 사용자에 필요한 정보들 예를 들면

닉네임 같은 정보들 이런것들을 세션에 담아두면 DB나 파일에 다시 접속할 필요가 없기에 효율적이다

 

즉 로그인여부와 닉네임을 세션으로 저장(세션은 원하는 객체를 생성하여 쿠키 형식으로 생성한다 생각)

is_logined와 nickname의 세션코드 작성 후 생성하고 웹브라우져에  접속하면 우리의 웹서버가 응답헤더로

셋쿠키 : connect.sid~~~라는 세션의 식별자를 쿠키의 형식으로 웹브라우져에 박아놓고

동시에 이 세션아이디에 매칭되는 파일을 서버쪽에 생성저장을 했고

우리가 작성한 두줄의 코드로 인해서 세션파일에는 닉네임과 is_logined의 값이 저장이 되었다

 

그러면 우리가 다시 웹애플리케이션에 접속할때 웹브라우져는 이 세션아이디를 다시 우리가 만든

애플리케이션으로 전송하겠죠?(다시 리로드하면 response 헤더에는 쿠키값이 없어지고 request 헤더에 쿠키값이 생성됨) 그러면 세션미들웨어는 저 값에따라서 우리가 파일에 저장되어 있는

값들에 접근할 수 있도록 세션 객체를 구워준다.

 

 

5.이제 로그인이 된다음에 홈으로 이동하도록 리다이렉트코드 작성

 

6.로그인에 성공했는지를 확인해서 UI 업데이트 

(1) 로그인 성공여부 체크하기 : console.log(request.session)를 해보면 4번에서 생성된 파일의

세션객체가 들어가 있음 

(2)if문으로 세션을 이용하여 로그인여부, 로그인UI 에 관한 코드 작성 및 함수화

(3) 모듈화 및 다른페이지에도 적용

 

7.logout기능 구현

logout을 누르면 저장되었던 세션을 삭제하도록 코드 설계

그렇게 되면 새로운 접속이 들어오는 것이기에 기존에 있던 세션파일이 삭제되고 새로운 세션파일이 생성되는데

생성된 세션파일 안에는 is_login이나 nickname 이 존재하지 않는다.

 

8. 접근제어

logout 상태에서 접근제어

return false 로 해당 함수 아래 함수들이 작동을 하지 않도록 해줘야함

 

9.세션저장

로그인 프로세스에서 세션 생성 코드를 보면

 

우리가 리퀘스트 세션의 객체에 is_logined와 nickname속성을 추가해 주면 관련 코드들이 다 실행된 후에

세션미들웨어는 우리대신에 우리가 기록한is_logined와 nickname속성을 추가하는 작업으로

만든 데이터를 세션 스토어에 기록하는 작업을 시작한다 이것을 메모리에 저장된 세션데이터를

저장소에다가 반영하는 작업을 나중에 한다

그런데 그 저장소가 어떤이유에 의해서 굉장히 느려졌다고 가정하면 예를 들어 1시간

이라고 하면 1시간동안 그 작업을 하고 있는데 리다이렉션은 순식간에 끝나니까

아직 세션스토어에 저장도 안했는데 리다이렉션이 끝나버리면 

나는 분명 로그인을 했는데 아직 안되어 있는 상태로 리다이렉션이 이루어지고 1시간 후에 로그인이

성공해버린다

이때 이것을 방지하기 위해 사용하는 것이

세션 객체의 세이브 함수이다 request.session.save()

이 함수를 이용하면 위의 세션객체에 추가한 데이터를 save함수가 세션 데이터 저장소에 

반영하는 작업을 바로 시작하고 그 작업이 끝난 후에 인자로 전달된

콜백함수를 실행하도록 약속되어있는 것이다.

 

'WebApp > Node.js-session' 카테고리의 다른 글

Node.js-session with express  (0) 2020.10.05
Node.js-session(cookie)  (0) 2020.10.05