Meine MIDDLEWARE prüft, ob die von Benutzern bereitgestellten Tokens korrekt sind. Die Sicherheitskontrolle, implementiert mit jsonwebtoken, war in der Middleware und es funktionierte gut. Nachdem ich beschlossen habe, all diese Sicherheitskontrollen in eine andere Datei zu verschieben: TokenManger.jsLogin Beispiel mit nodejs und jsonwebtoken: kann das Token-Verifizierungsergebnis nicht lesen
Aber ich weiß nicht, wie man den Code zwischen den beiden Dateien einstellt. Ich habe viele Möglichkeiten ausprobiert, aber niemand arbeitet.
Also nur zum besseren Verständnis füge ich im folgenden einen Beispielcode ein, der nicht funktioniert. Dies ist über die Middleware:
...
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!'
});
}
});
...
In der anderen Hand dies ein Beispiel ist (und nicht in Betrieb) Umsetzung der TokenManager.js:
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;
Tatsächlich ist die createToken(user)
Funktion arbeitet gut mit dem vorherigen Code, gibt es Probleme nur mit der verifyToken(token, admin, decode)
Funktion. Aber ich interessiere mich für das Design, also, wenn Sie auch Vorschläge über die Kreation haben, sind sie mehr als willkommen.
einfach das Bild zu vervollständigen, das ist, wie ich die createToken(user)
Funktion aufrufen:
...
.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
});
}
}
});
});
...
Sie Rückruf sind vorbei zu ' VerifyToken', aber es gibt keinen Callback in der Signatur von 'verifyToken'. –