내 MIDDLEWARE는 사용자가 제공 한 토큰이 올바른지 확인합니다. jsonwebtoken을 사용하여 구현 된 보안 통제는 미들웨어 내부에 있었고 정상적으로 작동했습니다. 이 보안 검사를 다른 파일로 옮기기로 결정한 후 TokenManger.js로그인 예 nodejs 및 jsonwebtoken : 토큰 확인 결과를 읽을 수 없음
두 파일간에 코드를 설정하는 방법을 모르겠습니다. 여러 가지 방법을 시도했지만 아무도 작동하지 않습니다.
더 나은 이해를 위해 다음 예제 코드를 붙여 넣습니다. 작동하지 않습니다.
var _ = require('lodash');
var jwt = require('jsonwebtoken');
var config = require('../../config.js');
var TokenManager = {
createToken: function(user) {
if(user.admin){
var token = jwt.sign(user, config.SECRET_WORD.ADMIN,{expiresIn:config.EXPIRE_TIME.ADMIN_TOKEN});
}else{
var token = jwt.sign(user, config.SECRET_WORD.USER,{expiresIn:config.EXPIRE_TIME.USER_TOKEN});
}
return token;
},
verifyToken: function(token, admin, decode){
if(admin){
//admin authentication
jwt.verify(token, config.SECRET_WORD.ADMIN, function(err,key){
if(err){
return false;
}else{
return true;
}
});
}else{
//user authentication
jwt.verify(token, config.SECRET_WORD.USER, function(err,key){
if(err){
return false;
}else{
return true;
}
});
}
}
}
module["exports"] = TokenManager;
실제로 createToken(user)
함수 이전에 잘 작동 다음 TokenManager.js 구현이 일례이다
...
router.use(function(req,res,next){
var token = req.body.token || req.query.token || req.headers['x-access-token'];
//decode token
if(token){
TokenManager.verifyToken(token,true,function(err,key){
if(err) return res.json({ success : false, message : "Failed to authenticate token"});
else next();
});
}else{
// no token, return error
return res.status(403).send({
success : false,
message: 'No token provided!'
});
}
});
...
반면에 (작업이 아닌)이 미들웨어에 관한 코드의 경우 verifyToken(token, admin, decode)
기능에만 문제가 있습니다. 그러나 나는 디자인에 관심이 있습니다. 그래서 당신이 창조에 대한 제안을 가지고 있다면, 환영받을 만하다.
createToken(user)
함수를 호출하는 방법이다, 그림을 완성하기 :
...
.post(function(req,res){
User.findOne({ username: req.body.username }, function(err,user){
if(err) throw err;
if(!user){
res.json({ success: false, message: 'Authentication failed. User not found!' });
}else{
if(user.password != req.body.password){
res.json({ success: false, message: 'Authentication failed. Wrong password!' });
}else{
//token creation
var token = TokenManager.createToken(user);
res.json({
success: true,
token: token
});
}
}
});
});
...
verifyToken'하지만 서명에 콜백이 없습니다. 'verifyToken'의 –