我是节点js的新手。我正在使用jwt理解身份验证。据我所知,快递中的请求处理程序就是这样的
app.post('/login',function(req,res){...});
以下是我感到困惑的片段。
app.js
var userController = require('./Controllers/user');
var authController = require('./Controllers/auth');
var tokenController = require('./Controllers/validate');
var deviceController = require('./Controllers/device');
app.post('/login',userController.validate,authController.authorize,userController.login);
如果仔细观察,发布方法有4个参数。 任何人都可以解释以下功能如何运作?
app.post('/login',userController.validate,authController.authorize,userController.login);
另外添加开发人员导入的js文件
user.js的
exports.validate = function(req,res,next) {
if(req.body.email === undefined){
return res.status(401).send({'message':'Email is required'});
}
if(req.body.password === undefined){
return res.status(401).send({'message':'Password is required'});
}
next();
};
const login = exports.login = function (req,res){
User.findOne({email:req.body.email},function(err, user){
if(err){
return res.status(401).send(err);
}
user.token = jwt.sign(user.password, 'TOPSECRETTTT');
user.save(function (err,user) {
if (err) {
res.send(err);
return;
}
res.status(200).send({email:user.email,loginToken:user.token});
})
});
};
auth.js
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
(function(username, password, callback) {
User.findOne({ email: username }, function(err, user) {
if (err) {
return callback(err);
}
if (!user) {
return callback(null, false);
}
user.matchPassword(password, function(err, isMatch) {
if (err) {
return callback(err);
}
if (!isMatch) {
return callback(null, false);
}
return callback(null, user);
});
});
})));
exports.authorize = passport.authenticate('local', { session: false });
如果有任何源/链接我可以找到更多这样的实现,请告诉我。
答案 0 :(得分:0)
正如评论中所提到的,express是关于中间件的 - 如果它与路由匹配,它将按顺序浏览这些中间件函数,直到它到达res.send()
在这种情况下,您的中间件会验证POST
数据,然后创建用户,对其进行身份验证并返回授权令牌。每个中间件使用next();
继续到链中的下一个中间件,如果它在任何时候失败,它会发送相应的失败响应,其中res.send()
状态代码为错误。在这种情况下401 Unauthorized
。