morgan 미들웨어는 요청과 응답에 대한 정보들을 콘솔에 기록한다.
npm install morgan
const morgan = require('morgan');
app.use(morgan('dev'));
그 후에 해당 포트에 접속하면 콘솔창에 기록들이 나온다.
위에서 / 에서 GET 요청을 했을때, 해당 응답바이트와, 응답 속도를 나타낸다.
morgan 함수 안에 인수로 dev를 넣었는데, dev 말고도 combined, common, tiny, short 가 있다.
보통 개발용일때는 dev나 short, 배포 환경에서는 combined 나 common 을 사용한다.
cookie-parser 미들 웨어는 요청에 동봉된 쿠키를 해석해서 req.cookies 객체로 만든다.
const cookieParser = require('cookie-parser');
app.use(cookieParser(process.env.비밀키))
해석된 쿠키들은 req.cookies 객체로 들어가는데, 예를 들어 COOKIE_SECRET = cookiesecret 라는 쿠키를 보냈다면 req.cookies는
{COOKIE_SECRET : 'cookiesecret'}
가 된다.
쿠키의 유효기간이 지났다면 알아서 걸러낸다.
cookieParser() 안에 들어가는 비밀키는 서명된 쿠키가 있는 경우에 비밀키를 통해서 내 서버가 만든 쿠키임을 검사할 수 있다.
쿠키는 클라이언트쪽에 위치해서 보안상 위조하기 쉬우므로 비밀 키를 통해서 만들어낸 서명을 쿠키 값 뒤에 붙인다.
서명이 붙은 쿠키 값은 COOKIE_SECRET = cookiesecret.sign 과 같은 모양이 되고, req.cookies 대신에 req.signedCookies 객체에 들어가 있다.
쿠키 생성이나 제거는 cookie-parser 가 아닌 res.cookie, res.clearCookie 메서드를 사용해야한다.
res.cookie(키, 값, 옵션) 형식으로 사용한다.
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
res.cookie('name', 'BRNGDY', {
expires : new Date(Date.now() + 90000),
httpOnly : true,
secure : false,
signed : true
});
console.log(req.cookies)
});
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
res.clearCookie('name', 'BRGNDY', {
httpOnly : true,
secure : true
})
});
쿠키를 제거 할때는 키와 값외에 다른 옵션도 일치해야 작동한다.
하지만 expires 나 maxAge 옵션은 일치할 필요가 없다.
express-session 이란 세션 관리용 미들 웨어이다.
세션은 req.session 객체 안에 유지된다.
const session = require('express-session');
app.use(session({
resave : false, // 요청이 올때 세션에 수정사항이 생기지 않더라도 세션을 다시 저장할것인가?
saveUninitialized : false, // 세션에 저장할 내역이 없더라도 처음부터 세션을 생성할 것인가?
secret : process.env.COOKIESECRET,
cookie : { // 세션쿠키에 대한 설정
httpOnly : true,
secure : false
},
name : 'session-cookie'
}))
session의 인수로는 세션에 대한 설정을 받는다.
express-session 은 세션 관리시 클라이언트에게 쿠키(세션쿠키)를 보낸다.
안전하게 쿠키를 전송하려면 쿠키에 서명을 추가로 해야하고, 쿠키를 서명하는데 secret 값이 필요하다.
세션 쿠키에 대한 설정중에 store 라는 옵션도 있는데, store를 따로 설정을 해주면 브라우저가 꺼졌다 켜져도 세션이 유지된다.
express-session 으로 만들어진 req.session 객체에 값을 대입하거나 삭제해서 세션을 변경할 수도 있다.
req.sessionID 를 이용해서 현재의 세션아이디 확인을 할수도 있다.