[Node.js] 로그인해야 접속가능한 마이페이지 만들기
마이페이지 만들기
로그인을 한 사람만 들어갈 수 있는 페이지를 만들어보자
일단 마이페이지 역할을 할 ejs 파일을 하나 생성해줬다(mypage.ejs)
그럼 서버에서 /mypage 로 접속했을 때 이 페이지로 라우팅을 시켜주자
loggedin 이라는 미들웨어를 생성해주고,
app.get('/mypage', loggedin, funtion(req, res){ ...
이런식으로 중간에 넣어주면 /mypage 요청과 mypage.ejs 응답 사이에 loggedin 이라는 함수를 실행시켜준다.
loggedin의 내용은 다음과 같다
req.user 가 있다면 next()로 통과시키고, 없다면 '먼저 로그인 해주세요.' 라는 메세지를 res.send() 해달라- 라는 의미이다.
로그인을 하고 /mypage 로 접속해보았다.
마이페이지로 잘 이동하는 것을 볼 수 있다.
쿠키를 삭제하고 접속하면 먼저 로그인을 하라는 메세지가 뜬다.
* 로그인을 해도 마이페이지에 접근이 안되는 오류가 있었다.
그래서 로그인을 했는지 확인하는 코드와 마이페이지에 접근하는 코드를
/login 경로에 대한 코드 아래로 옮겨봤는데 정상적으로 작동했다.
코드의 순서가 영향이 있나보다.
마이페이지에 유저 정보 출력하기
이번엔 마이페이지에 로그인한 유저의 정보를 출력해보려고 한다(예 : 아이디..)
일단 코드를 보면 mypage 에서 req.user 에 들어가는 것은 로그인한 유저의 db 상 정보이다.
이걸 사용하려면 deserializeUser 라는 부분 기능 개발이 필요하다.
deserializeUser 를 이용해서 세션아이디를 바탕으로 이 유저의 정보를 db 에서 찾고, 그 정보를 req.user 부분에 넣어준다.
req.user 에 정보를 넣었다면 이 데이터를 mypage.ejs 로 보내주면된다.
res.render("mypage.ejs", {user : req.user});
위와같이 코드를 작성해주면 user 라는 변수에 req.user 를 넣어서 mypage.ejs 로 전송해준다.
mypage.ejs 에서는 user 라는 변수를 쓸 수 있게 된다.
유저의 아이디를 마이페이지에 출력해보도록 했다.
잘 출력이 됨을 확인할 수 있었다.
회원가입 기능에 대한 아이디어
회원가입 기능도 만들 수 있을 것 같다.
누군가 회원가입 POST 요청을 하면,
폼에 입력했던 정보를 db에 저장을 한다.
- 이때 중복검사 해주면 좋을듯.
- 비밀번호를 암호화 해서 저장하는 것도 좋겠다. 암호화는 라이브러리를 사용해서 구현가능하다.
실제 서버 제작을 위해 더 공부해야할 것
- 디자인, UI 개발, IE 호환성, 반응형 웹 등 프론트엔드 내용
- 악성 유저가 아이디를 너무 길거나 이상하게 적으면 어떻게 할지 (직접 악성 유저가 되어 이것저것 테스트)
- DB에 저장하기 전에 빈칸이 없는지, 길이가 너무 길지 않은지 정규식과 if문으로 검증하기
- helmet 라이브러리 등으로 보안 약간 더하기
- 이미지 업로드 등 서버에서 이미지 처리하기 (압축, 저장, 리사이즈 등)
- Oauth 등 다른 로그인 방식 도입해보기
- express-session 라이브러리는 세션이 많아지면 서버의 메모리를 많이 잡아먹기 때문에 connect-mongo 등의 라이브러리로 DB에 세션데이터를 저장해서 사용하기
등이 있다고 한다.