2016-11-29 1 views
2

jwt-simple 노드 모듈을 사용하여 로그인 할 때 토큰을 생성 중입니다. 아래의 은 내 코드입니다.Passport Authenticate 기능이 노드 api에서 작동하지 않습니다.

apiRoutes.put('/login', function(req, res, next){ 
    User.findOne({email:req.body.email}, function(err, user){ 
    bcrypt.compare(req.body.password, user.password, function(err, result){ 
     if(result){ 
     var token=jwt.encode(user,config.secret); 
     return res.json({token:token});   
     }else{ 
     return res.json("Incorrect Email and Password") 
     } 
    }) 
    }) 
}); 

토큰이 성공적으로 작성됩니다. 이제 /dashboard 경로에서 사용자를 인증하려고합니다.

apiRoutes.get('/dashboard', passport.authenticate('jwt', { session: false}), function(req, res) { 
    var token=getToken(req.headers); 
    if(token){ 
    var decode=jwt.decode(token, config.secret); 
    User.findOne({name:decode.name}, function(err, user){ 
     if(err){res.json(err)} 
     if(!user){ 
      return res.status(403).send({success:false, msg:'Authentication Failed'}) 
     }else{ 
      res.json({success:true, msg:'Welcome in the Area' +user.name+'!'}) 
     } 
    }) 
    }else{ 
    return res.status(403).send({success:false, msg:'No Token Found'}) 
    } 

    }); 


getToken = function (headers) { 
     if (headers && headers.authorization) { 
     var parted = headers.authorization.split(' '); 
     if (parted.length === 2) { 
      return parted[1]; 
     } else { 
      return null; 
     } 
     } else { 
     return null; 
     } 
    }; 

문제는 내가 postman에이 API를 타격하고 때 그것의 Unauthorized을 보여주고 그때 경로에서 여권 인증 기능 passport.authenticate('jwt', { session: false})를 제거 할 때 그 success:false, msg:'No Token Found'를 인쇄하는 것입니다. 이 문제를 해결하는 방법을 모르겠습니다. 제 코드를보고 제 잘못이 어디 있는지 알려주십시오.

감사합니다. 감사합니다.

+0

passport.authenticate ('jwt', {session : false})를 사용하면 어떤 목적이 있습니까? 그리고 그것을 디버깅하거나 기록 할 때 토큰으로 제공되는 것. – Dnyanesh

+1

'passport.authenticate ('jwt', {session : false})'가 토큰이 유효한지 확인하는 데 사용하고 있습니다. 그러나 내가 그 길에서 그것을 사용할 때 그 사람은'Unauthorized'를줍니다. 즉'token'이 유효하지 않거나 무엇을 의미합니까 ??? 나는 얻지 못한다 –

답변

0

내 이해에 따라. passport.authenticacte() 함수를 사용하기 전에 전략을 정의해야합니다. this link을 확인하십시오. 그리고 난 그냥 단순한 jwt 대신 passport-jwt module을 사용할 수 있다고 생각합니다. 희망이 도움이됩니다.

+0

[this] (https://devdactic.com/restful-api-user-authentication-1/) 자습서를 따르고 있습니다. 그리고 그것의 일 벌금은 또한'jwt-simple'을 사용하고 있습니다. –

+0

자습서에 따라 jwt 전략을 만들었습니까? 본 튜토리얼의 "전략 및 사용자 만들기"섹션을 확인하십시오. –

+0

예 이미 만들었습니다. –

관련 문제