• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 비밀번호 암호화

비밀번호 암호화

9 글 보임 - 1 에서 9 까지 (총 9 중에서)
  • 글쓴이
  • #27404

    SEUNGHAK LEE
    참가자

    안녕하세요.

    비밀번호 암호화를 하려고, 참고할 만한 글들을 찾아 보았는데 연결이 안되고 너무 어렵습니다. 쉽게 설명된 곳을 알려주세요.

    감사합니다. 

    #27429

    codingapple
    키 마스터

    const bcrypt = require('bcrypt');

    app.post('/가입', function (req, res) {
      bcrypt.hash(req.body.유저가보낸패스워드, 8).then(function(암호화된패스워드) {
        암호화된패스워드와 유저아이디를 db에 저장해주세요~
      })

    })

    bcrypt 이런거 쓰기 쉽습니다 

    #27863

    SEUNGHAK LEE
    참가자

    bcrypt  비밀번호 암호화 강의 한번만 해 주시면 안될까요? 너무 어려워서, 다른 곳의 설명은 선생님이 강의 하신 것과 달라서 연결을 해서 이해하기가 너무 어렵습니다. 부탁드립니다.

    #27898

    codingapple
    키 마스터

    npm install bcrypt 하시고 

    const bcrypt = require('bcrypt');
    const saltRounds = 10;
    상단에 추가하고

     

    유저가 서버로 아이디, 비번을 보내서 회원가입 post 요청시에 

    bcrypt.hash(요청.body.pw, saltRounds, function(err, hash) {
      db.collection('login').insertOne({ id : 요청.body.id, pw : hash }, function(){})
    });

    이런코드 실행해주면 될듯요 

    salt 는 얼마나 함호화할지 이런것 설정하는 부분이고 hash는 암호화완료된 비번입니다 

    #28290

    SEUNGHAK LEE
    참가자

    자주 시간 뺏어서 죄송합니다. 

    말씀하신 대로 해서 mongodb에 암호화돤 pw를 저장하는 것까지 성공했는데, login이 실패해서 ('/list)가 아닌  ('/ ')로 redirect 됩니다.

    app.get('/login', function (요청, 응답) {
        응답.render('login.ejs')
    })
    app.post('/register', (요청, 응답) =>{
        bcrypt.hash(요청.body.pw, saltRounds, function (err, hash) {
            db.collection('login').insertOne({ id: 요청.body.id, pw: hash}, function (에러, 결과) {
                응답.redirect('/login')
            })
        })
    });
    app.post('/login', passport.authenticate('local', {
        failureRedirect: '/'
    }), function (요청, 응답) {
        응답.redirect('/list')
    });
    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: '존재하지않는 아이디요' })
          bcrypt.hash(입력한비번, saltRounds, function (에러, hash) {
              if (hash == 결과.pw) {
                return done(null, 결과)
              } else {
                  return done(null, false, { message: 'Wrong Password'})
              }
          })
        })
    }));
    passport.serializeUser(function (user, done) {
        done(null, user.id)
    });
     
    passport.deserializeUser(function (아이디, done) {
        db.collection('login').findOne({id: 아이디}, function (에러, 결과) {
            done(null, 결과)
        })
    });

    어느 부문이 잘못되었는지 알려 주세요. 감사합니다. 이승학 올림.

    #28304

    codingapple
    키 마스터

    /login 으로 post요청하는 코드에 

        failureRedirect: '/'

    이게 로그인 실패시 /경로로 이동하라는 뜻이라 그렇습니다 여기를 /list로 바꾸거나 그럽시다 

    #28312

    SEUNGHAK LEE
    참가자

    login 이 fail 하지 않게 하고 싶습니다.

    왜 fail 되는지 모르겠습니다. 입력한비번을 hash 한 것과 결과.pw를 비교하는 과정에서 실수 한 것 같은데 가르쳐 주세요. 

     

    #28329

    codingapple
    키 마스터

    db에 있는 암호화된거랑 유저가 입력한거랑 비교할 땐 

    bcrypt.compare(입력한비번, db에있던암호화된비번, function (에러, 결과) {

      if (res == true) {
            return done(null, 결과)
      } else {
            return done(null, false, { message: '비번틀렸어요' })
      }

    }

    이러면 됩니다 

    #28342

    SEUNGHAK LEE
    참가자

    성공했습니다. 그런데

    bcrypt.compare(입력한비번, 결과.pw, function (에러, isMatch) {
              if (isMatch) {
                return done(null, 결과)
              } else {
                  return done(null, false, { message: 'Wrong Password'})
              }
          })

    이렇게 해야 됩니다. 감사합니다.

9 글 보임 - 1 에서 9 까지 (총 9 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠