세션(Session)
세션에 대한 기본적인 이해는 되었으니 이제 사용법을 알아보겠다.
먼저, 두가지 라이브러리를 설치해야한다.
npm i express-session session-file-store
express-session : 세션을 사용하기 위한 라이브러리
session-file-store : 세션을 저장하기 위한 세션저장소
아래는 서버에서의 기본적인 설정이다.
const session = require('express-session');
const FileStore = require('session-file-store')(session);
app.use(session({
secret: 'jung',
resave: false,
saveUninitialized: true,
store: new FileStore(),
cookie: {
maxAge: 1000*60*10,
},
}));
secret : 보안 목적의 값, 테스트용으로는 아무거나 입력해도 됨.
resave : 수정되지 않은 세션도 저장할 것 인가.
saveUninitialized : 저장할 값이 없어 세션을 새로 생성할 것인지.
cookie: { maxAge } : 쿠키를 유지할 시간.
이제 활용하는 방법이다.
db.query(query, params, (err, result) => {
if (err) throw err;
if (result.length > 0) {
req.session.is_logined = true;
req.session.ss_nickname = result[0].nickname;
req.session.save(function () {
res.json({ redirectPath: '/', ss_nickname: result[0].nickname });
});
}
});
위 코드는 클론 프로젝트에서 사용했던 코드의 일부이다.
session.*** 을 이용해 세션을 생성 저장하고, res.json으로 원하는 값을 전달해 줄 수 있다.
이 부분은 로그인 자가 누구인지 등을 표현하기위해 필요하다.
또한, express-session은 sessionID값을 자동으로 쿠키로 전달해주기 때문에 그대로 이용하면 된다.
클라이언트 측에 쿠기로 sessionID가 저장되었기 때문에 특정 상태에서 로그인 상태에 대해 확인이 필요하면,
로그인 상 확인을 위한 엔드포인트를 만들어 기능을 추가하여주면 된다.
app.get('/check', (req, res) => {
if (req.session.is_logined) {
res.json({ loggedIn: true, ss_nickname: req.session.ss_nickname });
} else {
res.json({ loggedIn: false });
}
});
다만 여기서도 sessionID를 딱히 전달받거나 하지 않는데,
클라이언트 측에서 로그인 상태 확인 부분에 'credentials: 'inclued'' 옵션을 사용하면 클라이언트가 서버에 요청을 보낼때 자동으로 쿠키를 전달한다. (서버에서는 이 쿠키를 통해 세션ID 확인)
'Node.js' 카테고리의 다른 글
[Node.js] Google Vision Api OCR / 텍스트 추출하기 / Tesseract? (0) | 2024.12.11 |
---|---|
[Node.js] Multer (0) | 2024.11.20 |
[Node] passport (0) | 2024.11.08 |
[Node] Axios (0) | 2024.02.28 |
[Node] Body-Parser (1) | 2024.02.27 |