[Node.js 개발자 되기] 5. HTTP프로토콜 특징 그리고 세션과 쿠키
HTTP 프로토콜 세션과 쿠키를 설명하기 앞서 HTTP프로토콜의 특징에 대해서 알아보겠습니다. HTTP프로토콜은 Connectionless(비연결)을 지향합니다. 즉 클라이언트와 서버가 대화(요청, 응답)를 주고받
pventi.tistory.com
로그인 구현을 위해 FE부분을 수정해 놨습니다.
상단에 내비게이션 바를 보면 signin 기능 펜촉모양(포스트 작성) 기능이 생겼습니다.
게시글을 아무나 작성하도록 놔두면 홈페이지가 원하지 않는 글로 도배가 될 것입니다. 이를 위해 회원가입을 통해 사용자를 받고 인가된 사용자만이 게시글과 답변을 달도록 만들어 줘야 합니다.
1.0 세션
이전 글에서 세션에 대해서 알아봤습니다. 회원가입을 받고 그 정보를 데이터베이스에 저장한다고 해도 로그인 상태를 유지하는 방법은 세션을 추가하지 않고서는 없습니다.
1.1 cookie-parser, express-session
npm i cookie-parser express-session
express-session을 사용하기 위해서는 cookie가 필요합니다.
파일경로 : index.js
const cookieParser = require('cookie-parser')
const session = require('express-session')
// .env file에 저장한 쿠키, 세션 키
const { SECRET_KEY_CS } = process.env;
...
app.use(cookieParser(SECRET_KEY_CS));
app.use(session({
secret : SECRET_KEY_CS,
resave : false,
saveUninitialized : false,
cookie : {
httpOnly : true,
secure : false
}
}))
secret : 쿠키에 서명 추가
resave : 세션에 변동사항이 없어도 세션을 다시 저장할지
saveUninitialized : 세션에 저장할 내용 없어도 처음부터 세션을 설정할지
cookie
> httpOnly (보안) : 스크립트로 쿠키 탈취 방지(XSS)
> secure(보안) : https을 사용하지 않는 사이트에 대해 쿠키 전송 방지
1.2 로그인
이번장에서는 데이터베이스가 필요한 회원가입(회원 정보 저장) 기능 없이 세션이 유지되는 것만 확인하겠습니다.
파일경로 : routes/sign/router.js
...
router.get("/login", (req, res, next) => {
const { username, password } = req.body;
if(!req.session.user) {
req.session.user = {
id : username,
pw : password,
name : username,
authorized : true
}
}
res.status(200).render('index', { username })
})
로그인 정보는 요청할 때 post로 요청을 하기에 req.body 에서 username과 password를 불러옵니다. 별도로 데이터베이스에 회원정보를 저장하지 않았기에 별다른 인증 없이 바로 세션에 값이 없을 경우 세션에 유저정보를 채워줍니다. (실제로는 세션 값 설정하기 전에 인가된 사용자인지 검증 코드가 있습니다.)
1.3 로그아웃
파일경로 : routes/sign/router.js
router.get('/logout', (req, res, next) => {
if(req.session.user){
req.session.destroy();
}
res.status(200).render(index, { username : undefined })
})
세션을 지우는 과정은 간단하게 destroy 함수를 이용하시면 간단하게 세션이 삭제되며 로그인 연결이 끊어집니다.
2.0 결과
상단 네비게이션바를 확인해 보시면 signin 버튼이 있던 부분에 유저 이름과 로그아웃버튼으로 전환되어 있는 것을 확인하실 수 있습니다.
GitHub - dotredbee/rest-basic: rest-basic server 1
rest-basic server 1. Contribute to dotredbee/rest-basic development by creating an account on GitHub.
github.com
'Backend > Node.js' 카테고리의 다른 글
[Node.js] 캐시, LRU 캐시 (0) | 2023.03.05 |
---|---|
[Node.js 개발자 되기] 7. Token 기반 인증에 대하여 (0) | 2023.02.28 |
[Node.js 개발자 되기] 5. HTTP프로토콜 특징 그리고 세션과 쿠키 (0) | 2023.02.23 |
[Node.js 개발자 되기] 4. BootStrap 적용 (0) | 2023.02.22 |
[Node.js 개발자 되기] 3. 코드 정리하기 (0) | 2023.02.22 |