express-session은 세션 관리를 하는 미들웨어 입니다. 로그인 등의 이유로 세션을 구현하거나, 특정 사용자 데이터를 임시로 저장할 때 사용하죠. 세션은 사용자별로 req.session 객체에 유지됩니다.
[app.js]
const express =require('express');
const morgan = require('morgan');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const dotenv = require('dotenv');
const path = require('path');
dotenv.config();
const app = express();
app.set('port', process.env.PORT || 3000);
app.use(morgan('dev'));
app.use('/', express.static(path.join(__dirname, 'public')));
app.use(express.json());
app.use(express.urlencoded( {extended: false} ));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(session({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
name: 'session-cookie',
}));
app.use((req, res, next) => {
console.log('모든 요청에 실행됨');
next();
});
app.get('/', (req, res, next) => {
console.log('GET / 요청에서만 실행됨');
next();
}, (req, res) => {
throw new Error('에러는 에러 처리용 미들웨어로 전달');
});
app.use((err, req, res, next) => {
console.error(err);
res.status(500).send(err.message);
});
app.listen(app.get('port'), () => {
console.log(app.get('port'), '번 포트에서 대기');
});
여기서 express-session 사용은 다음과 같이 합니다. 인수로 세션에 대한 설정을 받게 되지요.
* 참고로 1.5 버전 이전에는 cookie-parser 사용 때문에 express-session을 뒤에 놓아야 했습니다. 현재는 해결되었지만 일단 뒤에 놓는 것이 안전합니다.
app.use(session({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
name: 'session-cookie',
}));
- resave : 요청이 올 때, 세션에 수정 사항이 없어도 세션을 다시 저장할지 여부를 설정합니다.
- saveUninitialized : 세션에 저장할 내역이 없어도 처음부터 세션을 생성할 것인지 설정합니다.
- cookie : 세션 쿠키에 대한 설정입니다. express-session은 세션 관리를 위해 클라이언트에 쿠키를 보냅니다(앞선 아티클에서 세션을 공부할 때 살펴본 세션 쿠키).안전한 쿠키 전송을 위해 서명을 추가하고, 여기에 secret 값이 사용됩니다. 참고로 이 경우 cookie-parser의 secret과 같이 설정하는 것을 추천합니다. 세션 쿠키의 이름은 name 옵션으로 설정합니다. 기본은 connect.sid입니다.
> maxAge, domain, path, expires, sameSite, httpOnly, secure 등의 일반 쿠키 옵션을 모두 사용할 수 있습니다.
> httpOnly : true를 사용해 클라에서 쿠키 확인을 방지 했습니다.
> secure : false로 설정해 https가 아닌 환경에서도 사용할 수 있게 했습니다(라이브는 변경 필요). - store : 세션 저장을 위한 옵션입니다.
'Programming > Node.js' 카테고리의 다른 글
7. 익스프레스 (1) - 미들웨어 [9] : 미들웨어의 특성 정리 1 (5) | 2024.09.02 |
---|---|
7. 익스프레스 (1) - 미들웨어 [8] : express-session 2 (2) | 2024.09.01 |
7. 익스프레스 (1) - 미들웨어 [6] : cookie-parser (0) | 2024.08.29 |
7. 익스프레스 (1) - 미들웨어 [5] : body-parser (0) | 2024.08.28 |
7. 익스프레스 (1) - 미들웨어 [4] : static (0) | 2024.08.27 |