• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

로그인 send 오류

21.05.26 10:57 작성 조회수 153

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

안녕하세요. 로그인 라우터 작성 후 send가 되지 않아 질문 드립니다.ㅠㅠ

혹시 제가 코드를 잘못 작성한 거 아닐까 영상을 몇 번이나 봐도 코드 오류는 아닌데.. 런해도 오류도 안 뜨구요ㅠㅠ 도움 부탁 드립니다..

이게 index.js


app.post('/login', (reqres)=> {
      //요청된 이메일을 데이터베이스에서 있는지 찾는다.
      User.findOne({email:req.body.email}, (erruser)=>{
        if(!user){
          return res.json({
            loginSucess : false,
            message:"제공된 이메일에 해당하는 유저가 없습니다."
          })
        }    

        //요청한 이메일이 있다면 비밀번호가 같은지 확인한다.
        //DB에 저장된 비밀번호와 로그인 시도 시 입력한 비밀번호를 비교한다.
        user.comparePassword(req.body.password, (errisMatch)=>{
          if(!isMatch)
          return res.json({loginSuccess : falsemessage : "비밀번호가 틀렸습니다."})
          
          //비밀번호까지 동일하다면 토큰을 생성한다.
          user.generateToken((erruser)=>{
            if(errreturn res.status(400).send(err);

            //토큰을 저장한다. 쿠키, 로컬스토리지 등 여러군데 저장이 가능하다. 
            //여기서는 쿠키에 저장하기로 한다.
            res.cookie("x_auth",user.token)
            .status(200
            .json({loginSuccess:trueuserId : user._id})

          })
        })
      })
})

이게 user.js 입니다.

userSchema.methods.comparePassword = function(plainPasswordcb){

    //plainPassword 1234567 | DB에 저장된 암호화된 비밀번호 ~ 가 같은지 체크해야 한다.
    //1234567을 암호화 한 후 비교하도록 한다. 복호화할 순 없기 때문에.

    bcrypt.compare(plainPasswordthis.passwordfunction(errisMatch){
        if (errreturn cb(err),
           cb(nullisMatch)
    })
}


userSchema.methods.generateToken = function(cb) {
    
    var user = this;

    //jsonwebtoken 을 이용해서 토큰을 생성하기
    var token = jwt.sign(user._id.toHexString(), 'secretToken')

    //user._id + 'secretToken' = token
    //-> secretToken을 넣으면 user id 값을 식별한다. 그래서 token은 식별을 위해 기억해둬야 해서 변수로 저장한다.
    //'scretToken' -> user._id


    user.token = token;
    user.save(function(erruser){
        if(errreturn cb(err)
        cb(nulluser
    })
}

const User = mongoose.model('User'userSchema)

module.exports = {User}

패스워드 암호화까지는 정상적으로 됩니다!

답변 2

·

답변을 작성해보세요.

0

하늘님    User.js  페이지에 보시면    

userSchema.methods.comparePassword = function(plainPassword, cb){

//plainPassword 1234567 | DB에 저장된 암호화된 비밀번호 ~ 가 같은지 체크해야 한다.
//1234567을 암호화 한 후 비교하도록 한다. 복호화할 순 없기 때문에.

bcrypt.compare(plainPassword, this.password, function(err, isMatch){
if (err) return cb(err),
cb(null, isMatch)
})
}

여기 보이시죠 ~?!  

여기서   return cb(err),    이렇게 되어있는걸   return cb(err);    이렇게 바꿔주세요 ! 수고하세요 ~!! 



남하늘님의 프로필

남하늘

질문자

2021.05.27

아! ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 그거 때문이었군요ㅠㅠ....이런 걸로 실수하다니ㅠㅠㅠ

강사님 ㅠㅠ 고생시켜드려서 죄송해요ㅠㅠ ㅠㅠㅠㅠ 감사합니다ㅠㅠ!! 나머지 강의도 잘 듣겠습니다!ㅠㅠㅠㅠㅠㅠㅠㅠ

0

안녕하세요 하늘님 깃헙주소 올려주시겠어요?! 

남하늘님의 프로필

남하늘

질문자

2021.05.26

안녕하세요! 

https://github.com/N2NO 입니다... ㅠ-ㅠ) ㅠㅠㅠ