본문 바로가기

코드짜는 마케터

[node.js]로그인 시 유저를 기억하게 만드는 법 1

 

유저에게 쿠키를 보내야 함

쿠키? 먹는 것?! 

 

 

쿠키를 알기 위해선 먼저 세션을 알아야 한다. 

세션은

- 백엔드와 브라우저 간에 어떤 활동을 했는지 기억하는 것을 말함

- 세션이 사라지면 다시 로그인을 해야 함

- 즉, 세션은 브라우저와 백엔드 사이의 memory, history 같은 것

- 작동하기 위해선 백엔드와 브라우저가 서로에 대한 정보를 가지고 있어야 함

 

stateless(무상태)

- 백엔드와 브라우저가 한 번 연결되고 끊어지는 상태를 말함

 

유저를 기억하기 위해서는 뭔가를 남겨야 한다. 

즉, 유저가 백엔드에 뭔가 요청할 때마다 누가 요청하는 지 알 수 있게

유저가 로그인 할 때마다 유저한테 뭔가를 줘야함(작은 text 같은 것) -> 유저가 백엔드에 뭔가를 요청할 때, 받은 텍스트도 함께 줘야함(보내달라고 요청함) -> 브라우져가 누구인지 알게 됨.

 

세션을 처리하는 미들웨어는

express-session

npm i express-session

 

설치 후에 server.js(앱과 미들웨어, 최상위 라우터 등을 한데 모아논 곳)에 session을 임포트함. 

그리고 session을 router위에 적어줌 

app.use(session({
    secret:"Hello!",
    resave:true,
    saveUninitialized:true,
}))

app.use("/",rootRouter);
app.use("/videos",videoRouter);
app.use("/users",userRouter)
app.use(logger)

 

이렇게 하면 session이 웹사이트에 들어오는 모두를 기억할 수 있게 됨 - > 자동적으로 쿠키를 보낸 것이 됨

 

console에서 확인할 수 있음 

//백엔드가 기억하고 있는 유저를 보여주게 하는 console
app.use((req,res,next) => {
    req.sessionStore.all((error,sessions) => {
        console.log(sessions)
        next();
    })
})

 


접속할 때마다 세션에서 만든 ID를 통해서 접속한 사람이 누구인지 알 수 있지만, 이는 서버가 열려 있을 때 가능

즉, 서버를 껏다가 다시 켜면 세션의 id는 사라져 버림. 이를 위해선 MongoDB에 저장해야 함

(같은 컴퓨터 같은 와이파이 상에서라도 브라우저마다 세션의 id가 다르다.)

 

서버는 쿠키에서 세션 id를 가져와 브라우저에게 보내줌. 서버는 그 id를 보고 사용자가 누군지 확인함

 

브라우저한테 보내준 id를 요청에 담아서 서버가 다시 브라우저에게 보내줌 

어떤 url에 들어가더라도 id를 제출해서 누가 들어 왔는 지 확인하게 해줌.