BackEnd/로스트아크 Work

passport를 통한 mysql 및 로그인 구현 Node.js

2021. 8. 16. 13:05
반응형

설치항목

npm install --save express-session passport passport-local

세가지를 설치해야한다

 

설정값들에 대한 관리를 위한 dotenv 패키지 설치

npm install --save dotenv

 

프로젝트 폴더내 .env 파일 생성, 쿠키 비밀키 입력

dotenv 의 config()호출시 env파일의 설정값이 process.env에 저장됌

이후에 process.env.COOKIE_SECRET처럼 설정값들을 사용 할 수 있다.

 

세션 설정

router.use(session({
  resave:false,
  saveUninitialized:false,
  secret:process.env.COOKIE_SECRET,
  cookie:{
    httpOnly:true,
    secure:false,
  }
}));

app.js에 express-session을 적용하면서 쿠키 비밀키를 설정해준다.

cookieParser와 session은 동일한 쿠키 비밀키를 사용해야함

 

선언들

const passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy;
const flash = require('connect-flash');



router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: false }));
router.use(cookieParser('keyboard cat')); //?
router.use(session({secret: 'keyboard cat'})); //?
router.use(passport.initialize()); //이니셜라이즈 패스포트
router.use(passport.session()); //세션사용 패스포트
router.use(flash()); //메시지 사용

패스포트 사용을 위한 passport 등록 및 LocalStategy 

아래 flash는 메시지 출력을 위해 필요하다던데 사용 안하였다

 

 

 

 

시리얼라이즈 및 디시리얼라이즈

passport.serializeUser(function(user, done) { done(null, id); }); //user.id에 저장 식별값이 .,..로그인시 유저정보 세션에 저장 위해 호출

passport.deserializeUser(function(id, done) {
  user_id.findById(id, function(err, user) 
  
  { done(err, user); }); 


});

 

passport.use(new LocalStategy) 전략

passport.use(new LocalStrategy({
  usernameField:'user_id', //req.body.username
  passwordField:'password_hash',//req.body.password
},async function(user_id, password_hash, done){
  //로그인시 로직작성할것 아래코드는 예시코드 mysql작성하는거
  var sql='select password_hash,user_id from users where user_id like?;';
  var params=[user_id]; 
  db.query(sql, params, function(err, rows){
    console.log(rows[0]);
  
    if(err) return done(err);
    if(rows.length === 0){
      console.log("결과 없음");
      return done(null, false, { message: 'Incorrect' });
    }//에러처리 존나중요해
    if(rows[0].password_hash!==password_hash) { console.log('비버니틀려용');
    return done(null, false, { message: "pw not found" });
  }
    if(rows[0].password_hash===password_hash)  {console.log('비번이마자용');
    var user= rows[0];
    return done(null, user); //여기까지 오는거면 위로 디비의 유저아이디 비번이 저장되서 올라감
  }


  })
}
))

내 db에서는 유저 아이디를 담당하는것이 user_id, 비번이 password_hash이며

sql문에서 유저의 비번과 아이디 순으로 가져오고 그 값을 rows객체에 저장

postman으로 아이디 비밀번호가 각각 00000, 0000인 데이터전송시 rows객체에 비번과 아아디가 저장되어있음을 console 로그로 확인

에러처리가 가장 중요한데 rows의 길이가 0일경우 아이디가 잘못되었다는것 에러처리를 안해주면 서버가 터져버린다

잘못되어도 return하는 done이 필수

 

그외 객체는 .password라던지 아이디 비밀번호 등 위의 것과 비교하여 아이디만 혹은 비번만 추출이 가능하다

따라서 db비밀번호가 postman으로 받은것과 동일하면 맞고 아니라면 틀린것으로 로그확인 이후 맞을때만 다시 routerpost로 done user를 보낸다  -->rows-->user로 복사한것

 

 

router.post

router.post('/login', async function(req, res, next){
  //패포실행 ->로그인 로컬
passport.authenticate('local',(authError,user,info)=>{//로컬전략에따른 로그인시도 응답작성
  if(authError){
    return res.json('user pww not found');
  }
  if(!user){
    return res.json('user id not found');
  }


  return res.json('check');
}
)(req,res,next);//미들웨어실행
}
);

패스포트의 포스트 부분이다 autherror부분은 아직 어떨때 진입하는건지 모르겠다..

!user일때는 아이디가 안맞을때인데 애초에 맞을때만 위로 올라올수있게 하였는데 저 문구가 어케 출력이 되는건지 잘 모르겠다.

 

 

 

mysql 연동을 통한 회원가입 구현

router.post('/signup', function(req, res) {
    user_id= req.body.user_id;
    user_pw = req.body.user_pw;
    signup_type=req.body.signup_type;
    res.json("user_id:"+user_id+","+"user_pw:"+user_pw+","+"signup_type:"+signup_type);
    var sql ='insert into users(user_id,password_hash,login_type) values(?,?,?)';
    var params=[user_id,user_pw,signup_type];
    db.query(sql,params,function(err,rows){
      if(err)console.log(err)
    })

  });

 

반응형

'BackEnd > 로스트아크 Work' 카테고리의 다른 글

DB Node JS 연동  (0) 2021.08.09
로스트아크 숙제 프로젝트 3일차  (0) 2021.06.21
로스트아크 숙제 프로젝트 2일차  (0) 2021.06.21
로스트아크 숙제 프로젝트 1일차  (0) 2021.06.21
'BackEnd/로스트아크 Work' 카테고리의 다른 글
  • DB Node JS 연동
  • 로스트아크 숙제 프로젝트 3일차
  • 로스트아크 숙제 프로젝트 2일차
  • 로스트아크 숙제 프로젝트 1일차
빡상이
빡상이
게임 및 개발 관련 일지 작성하는 블로그
빡상이
끄적끄적
빡상이
반응형
  • 분류 전체보기
    • FrontEnd
      • Vue3
      • Nuxt
    • BackEnd
      • 로스트아크 Work
    • 백준(알고리즘)
    • Unreal Engine
    • 아크라시아 세카이
    • C++
    • 웹 개발 꿀팁
    • C#
    • Linux
      • 명령어
    • DB
      • SQL
      • Tibero
전체
오늘
어제

최근 댓글

최근 글

hELLO · Designed By 정상우.
빡상이
passport를 통한 mysql 및 로그인 구현 Node.js
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.