2016-11-22 1 views
1

I는 다음과 여권 JWT와 loggedin 사용자의 ID와 토큰을 인코딩 오전 :후 로그인하여 토큰을 디코딩하는 방법 여권 JWT

var JwtStrategy =require('passport-jwt').Strategy; 
ExtractJwt = require('passport-jwt').ExtractJwt; 
var User   =require('../app/models/usermodel'); 
var config  =require('../config/database'); 

module.exports=function(passport){ 
    var opts = {}; 
    opts.jwtFromRequest = ExtractJwt.fromAuthHeader(); 
    opts.secretOrKey = config.secret; 
    passport.use(new JwtStrategy(opts, function(jwt_payload, done) { 
    User.findOne({id: jwt_payload.id}, function(err, user) { 
      if (err) { 
       return done(err, false); 
      } 
      if (user) { 
       done(null, user); 
      } else { 
       done(null, false); 
      } 
     }); 
    })); 
}; 

및 로그인 경로 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") 
     } 
    }) 
    }) 
}); 

내가 대시 보드 페이지에 로그인 한 사용자의 정보를 얻고 싶습니다. 하는 동안 나는 토큰을 디코딩하고 아래와 같이 대시 보드 API 경로에 인증을 추가하여 사용자의 모든 정보를 얻으려고 노력하고 있어요 : 내가 튜토리얼에서 발견

apiRoutes.get('/dashboard', passport.authenticate('jwt', { session: false}), function(req, res) { 
    console.log('User info: ' + req.user._id + '.'); 
    }); 

이 위의 코드 토큰을 디코딩 할 수 있습니다. 그래서,이 /api/dashboard url을 클릭하면 브라우저 콘솔에 오류가 표시됩니다.

GET http://localhost:3000/api/dashboard 401 (Unauthorized) 

나는 토큰 디코딩 및 사용자 정보를 가져 오는 방법을 모르겠어요. 이 문제를 해결하도록 도와주세요.

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

답변

0

저는 괜찮다고 확신하지만, 중간 개념의 미들웨어를 가지고 있다고 생각합니다. 나는 너에게 모범을 찾는다.

var cookieParser = require('cookie-parser'); 
app.use(cookieParser()); 

이 코드는 cookieParser()의 반환 값을 사용하여 쿠키를 구문 분석합니다. 다음은 cookieParser의 소스 코드입니다. 미들웨어입니다 - -

exports = module.exports = function cookieParser(secret, options){ 
    return function cookieParser(req, res, next) { 
    if (req.cookies) return next(); 
    var cookies = req.headers.cookie; 
    // main logic omits 
    next(); 
    }; 
}; 

그래서 당신은 cookieParser()의 결과를 볼 수 있습니다 매개 변수가 될 req, res, next있는 기능입니다. 또한 next()을 호출하여 다음 미들웨어 또는 귀하의 케이스에서 function(req, res) { console.log('User info: ' + req.user._id + '.'); }을 실행할 수 있습니다.

그래서 당신 passport-jwt에 매개 변수 req, res, next와 함수를 반환하기로하고, 당신은 내가 토큰을 디코딩하는`쿠키 Parser` 모듈을 사용할 필요가 의미 next()

+0

호출? –

+0

아니요, passport.authenticate()가 쿠키 파서와 동일한 스타일을 따라야 함을 의미합니다. 함수를 반환하십시오. – jiajianrong

관련 문제