rhanziy

node.js - session 방식으로 로그인 구현하기 본문

Node.js

node.js - session 방식으로 로그인 구현하기

rhanziy 2023. 3. 20. 16:12

 

로그인, 로그인 검증, 세션생성을 도와주는 라이브러리 총 3개 설치

(실제 서비스시 express-session 말고 MongoDB에 세션데이터를 저장해주는 라이브러리를 이용하자.)

express-session 라이브러리는 세션이 많아지면 서버의 메모리를 많이 잡아먹기 때문에 connect-mongo 등의 라이브러리로 DB에 세션데이터를 저장해서 사용하기 

npm install passport passport-local express-session

 

 

server.js에 추가할 코드. app.use() 는 요청과 응답사이에 뭔가 실행해줄 코드를 뜻하며 미들웨어임.

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const session = require('express-session');

app.use(session({secret : '비밀코드', resave : true, saveUninitialized: false}));
app.use(passport.initialize());
app.use(passport.session());

 

login.ejs 파일 생성 후 server.js에 페이지 렌더링 해주고~

login.ejs 파일에는 아이디, 비밀번호를 입력하는 input 태그가 들어가며, name 속성은 각각 id와 pw임

app.get('/login', function(요청, 응답){
  응답.redirect('/')
});

test를 위해 몽고db에 login컬렉션을 만들고 id:test / pw:test 로 새 도큐먼트를 생성해준다.

 

 

이제 로그인을 하면(POST) 중간에 검사하는 코드.

app.post('/login', passport.authenticate('local', {failureRedirect : '/fail'}), function(요청, 응답){
  응답.redirect('/')
});

url 다음 코드는 passport 라는 라이브러리가 제공하는 '아이디 비번 인증도와주는 코드'이다.

응답해주기 전에 local 방식으로 아이디 비번을 인증해주세요. 라는 뜻.

(failureRedirect라는 부분은 로그인 인증 실패 시 이동시켜줄 경로를 적자. 위의 코드는 실패시 /fail 경로로 유저를 이동시켜줌.)

 


 

세부 추가 코드작성은 passport 라이브러리 예제 복붙

passport.use(new LocalStrategy({
  usernameField: 'id',
  passwordField: 'pw',
  session: true,
  passReqToCallback: false,
}, function (입력한아이디, 입력한비번, done) {
  //console.log(입력한아이디, 입력한비번);
  db.collection('login').findOne({ id: 입력한아이디 }, function (에러, 결과) {
    if (에러) return done(에러)

    if (!결과) return done(null, false, { message: '존재하지않는 아이디요' })
    if (입력한비번 == 결과.pw) {
      return done(null, 결과)
    } else {
      return done(null, false, { message: '비번틀렸어요' })
    }
  })
}));

 

 

new LocalStrategy() 에서 local 방식으로 아이디/비번 검사를 어떻게 할지 도와주는 부분이라고 보면 됨

LocalStrategy( { 설정 }, function(){ 아이디비번 검사하는 코드 } ) 이런 흐름

아래는 설정 부분 상세설명이다.

passport.use( new LocalStrategy({ 
    usernameField: 'id', (요기는 사용자가 제출한 아이디가 어디 적혔는지 name 속성 이름) 
    passwordField: 'pw', (요기는 사용자가 제출한 비번이 어디 적혔는지 name 속성 이름) 
    session: true, (요기는 세션을 만들건지) 
    passReqToCallback: false, (요기는 아이디/비번말고 다른 정보검사가 필요한지) 
});

 

 

+ 지금은 보안이나 암호화과정이 생략된 코드인것을 감안하자.


 

세션만들고 세션 아이디 발급해서 쿠키로 보내주기

server.js에 입력하면 된다.

passport.serializeUser(function (user, done) {
  done(null, user.id)
});

// serializeUser 함수는 유저의 id데이터를 바탕으로 세션데이터를 만들어주고
// 그 세션데이터의 아이디를 쿠키로 만들어 사용자의 브라우저로 보내준다.



passport.deserializeUser(function (아이디, done) {
  done(null, {})
});


// 로그인 된 유저가 마이페이지에 접속했을 때 실행되는 함수

 

'Node.js' 카테고리의 다른 글

node.js - 환경변수 관리(.env)  (0) 2023.03.21
node.js - mypage 기능  (0) 2023.03.20
node.js - method-override 라이브러리 PUT 구현  (0) 2023.03.20
node.js - detail 상세페이지(params.id)  (0) 2023.03.20
node.js - ajax 삭제요청  (0) 2023.03.20
Comments