护照验证超时
passport authenticate timing out
我刚刚开始我的 Node.js 之旅,我正在尝试解决制定本地用户登录策略的想法。
我一直在追踪我的功能并使用 Postman 进行测试。现在我的身份验证策略悬而未决,我无法理解为什么。
passport.use(new LocalStrategy(
function(username, password, done){
console.log(username) // <-- this doesn't log
User.findOne({userName: username}, function(err, user){
if(err) return done(err);
if(!user){
return done(null, false, {
message: 'Could not login with those details.'
});
}
if(!user.validPassword(password)) {
return done(null, false, {
message: 'Could not login with those details.'
});
}
return done(null, user);
})
}
))
我提出了一个非常基本的 post 应用身份验证的请求。
app.post('/login', function(req, res){
console.log(req.body)
if(!req.body.userName || !req.body.password ) {
res.status(400),
res.json({"status" : "fail", "message" : "All fields
required"});
return;
}
passport.authenticate('local', function(err, User, info){
let token;
if(err){
res.status(400),
res.json({"status" : "fail", "message" : err});
return;
}
if(User){
token = User.generateJwt();
res.status(200);
res.json({"status" : "success", "token" : token });
}else{
res.status(401);
res.json({"status" : "fail", "message" : info });
}
})
})
据我所知,初始检查对于缺少的字段没有问题,但是当它到达 passport.authenticate
时它挂起并且似乎不符合我定义的策略。
我一直在浏览文档,我确定我在这里遗漏了一些东西,但就是看不到它。如果有人能指出正确的方向,我将不胜感激。
调用 passport.authenticate
returns 中间件函数,签名为 (req, res, next)
。在您的示例中,您使用了 custom callback 功能,因此您必须使用处理程序中的相关参数手动调用此结果函数:
app.post('/login', function(req, res){
console.log(req.body)
if(!req.body.userName || !req.body.password ) {
res.status(400),
res.json({"status" : "fail", "message" : "All fields
required"});
return;
}
passport.authenticate('local', function(err, User, info) {
let token;
if(err){
res.status(400),
res.json({"status" : "fail", "message" : err});
return;
}
if (User) {
token = User.generateJwt();
res.status(200);
res.json({"status" : "success", "token" : token });
} else{
res.status(401);
res.json({"status" : "fail", "message" : info });
}
// perform an actual call
})(req, res);
})
另请记住,passport-local
默认查找 username
字段,而不是像您在请求的参数验证中那样查找 userName
。
我刚刚开始我的 Node.js 之旅,我正在尝试解决制定本地用户登录策略的想法。
我一直在追踪我的功能并使用 Postman 进行测试。现在我的身份验证策略悬而未决,我无法理解为什么。
passport.use(new LocalStrategy(
function(username, password, done){
console.log(username) // <-- this doesn't log
User.findOne({userName: username}, function(err, user){
if(err) return done(err);
if(!user){
return done(null, false, {
message: 'Could not login with those details.'
});
}
if(!user.validPassword(password)) {
return done(null, false, {
message: 'Could not login with those details.'
});
}
return done(null, user);
})
}
))
我提出了一个非常基本的 post 应用身份验证的请求。
app.post('/login', function(req, res){
console.log(req.body)
if(!req.body.userName || !req.body.password ) {
res.status(400),
res.json({"status" : "fail", "message" : "All fields
required"});
return;
}
passport.authenticate('local', function(err, User, info){
let token;
if(err){
res.status(400),
res.json({"status" : "fail", "message" : err});
return;
}
if(User){
token = User.generateJwt();
res.status(200);
res.json({"status" : "success", "token" : token });
}else{
res.status(401);
res.json({"status" : "fail", "message" : info });
}
})
})
据我所知,初始检查对于缺少的字段没有问题,但是当它到达 passport.authenticate
时它挂起并且似乎不符合我定义的策略。
我一直在浏览文档,我确定我在这里遗漏了一些东西,但就是看不到它。如果有人能指出正确的方向,我将不胜感激。
调用 passport.authenticate
returns 中间件函数,签名为 (req, res, next)
。在您的示例中,您使用了 custom callback 功能,因此您必须使用处理程序中的相关参数手动调用此结果函数:
app.post('/login', function(req, res){
console.log(req.body)
if(!req.body.userName || !req.body.password ) {
res.status(400),
res.json({"status" : "fail", "message" : "All fields
required"});
return;
}
passport.authenticate('local', function(err, User, info) {
let token;
if(err){
res.status(400),
res.json({"status" : "fail", "message" : err});
return;
}
if (User) {
token = User.generateJwt();
res.status(200);
res.json({"status" : "success", "token" : token });
} else{
res.status(401);
res.json({"status" : "fail", "message" : info });
}
// perform an actual call
})(req, res);
})
另请记住,passport-local
默认查找 username
字段,而不是像您在请求的参数验证中那样查找 userName
。