Javascript 使用Passport.js的登录系统始终在执行“;故障重定向”;(nodejs)

Javascript 使用Passport.js的登录系统始终在执行“;故障重定向”;(nodejs),javascript,node.js,debugging,passport.js,body-parser,Javascript,Node.js,Debugging,Passport.js,Body Parser,我正在做一个教程,我被困在登录区。当我使用Passport.js登录时,它总是在authenticate中执行“failureRedirect” 尝试调试替换路由器后。post(“登录”)路由我收到以下消息: 错误:null用户:错误信息:{“消息”:“缺少凭据”} 在一些论坛上阅读之后,我认为这个问题可能与body解析器有关。我一直在努力解决这个问题,但还没能解决。非常感谢经验最丰富的node.js程序员的帮助 该项目的结构如下: app.js 路线: users.js 模型: user.js

我正在做一个教程,我被困在登录区。当我使用Passport.js登录时,它总是在authenticate中执行“failureRedirect”

尝试调试替换路由器后。post(“登录”)路由我收到以下消息:

错误:null用户:错误信息:{“消息”:“缺少凭据”}

在一些论坛上阅读之后,我认为这个问题可能与body解析器有关。我一直在努力解决这个问题,但还没能解决。非常感谢经验最丰富的node.js程序员的帮助

该项目的结构如下: app.js 路线: users.js 模型: user.js

user.js
var express=require('express');
var router=express.router();
var multer=需要('multer');
var passport=需要(“passport”);
var LocalStrategy=require('passport-local')。策略;
var bodyParser=require('body-parser');
var User=require('../models/User');
var upload=multer({dest:'./uploads'});
//创建应用程序/json解析器
var jsonParser=bodyParser.json();
//创建应用程序/x-www-form-urlencoded解析器
var urlencodedParser=bodyParser.urlencoded({extended:false});
/*获取用户列表*/
router.get('/',函数(req,res,next){
res.send(“用资源响应”);
});
路由器.get('/register',函数(req、res、next){
res.render('寄存器'{
标题:“登记”
});
});
router.get('/login',函数(req,res,next){
res.render('login'{
“标题”:“登录”
});
});
router.post('/register',upload.single('profileimage'),函数(req,res,next){
//获取表单值
var name=req.body.name;
var email=req.body.email;
var username=req.body.username;
var password=req.body.password;
var password2=req.body.password2;
//检查图像字段
if(req.files&&req.files.profileimage){
log('上传文件…');
//文件信息
var profileImageOriginalName=req.files.profileimage.originalname;
var profileImageName=req.files.profileimage.name;
var profileImageMime=req.files.profileimage.mimetype;
var profileImagePath=req.files.profileimage.path;
var profileImageExt=req.files.profileimage.extension;
var profileImageSize=req.files.profileimage.size;
}否则{
//设置默认图像
var profileImageName='noimage.png';
}
//表单验证
req.checkBody('name','name字段为必填项')。notEmpty();
req.checkBody('email','email字段为必填项')。notEmpty();
req.checkBody('email','email无效').isEmail();
req.checkBody('username','username字段是必需的')。notEmpty();
req.checkBody('password','password字段是必需的')。notEmpty();
req.checkBody('password2','Passwords not match').equals(req.body.password);
//检查错误
var errors=req.validationErrors();
如果(错误){
res.render('寄存器'{
错误:错误,
姓名:姓名,,
电邮:电邮,,
用户名:用户名,
密码:密码,
密码2:密码2
});
}否则{
var newUser=新用户({
姓名:姓名,,
电邮:电邮,,
用户名:用户名,
密码:密码,
profileImage:profileImageName
});
//创建用户
createUser(newUser,函数(err,User){
如果(错误)抛出错误;
console.log(用户);
});
//成功信息
req.flash('成功','您现在已注册,可以登录');
资源位置('/');
res.redirect('/');
}
});
passport.user(函数(user,done){
完成(null,user.id);
});
passport.deserializeUser(函数(id,完成){
getUserById(id,函数(err,User){
完成(错误,用户);
});
});
passport.use(新本地策略)(
函数(用户名、密码、完成){
User.getUserByUsername(用户名,函数(err,User){
如果(错误)抛出错误;
如果(!用户){
console.log(“未知用户”);
返回done(null,false,{message:'Unknown User'});
}
User.comparePassword(密码,User.password,函数(err,isMatch){
如果(错误)抛出错误;
如果(isMatch){
返回完成(空,用户);
}否则{
console.log(“无效密码”);
返回完成(null,false,{消息:'Invalid Password'});
}
});
});
}
));
router.post('/login',jsonParser,passport.authenticate('local'{
successRedirect:“/”,
failureRedirect:“/users/login”,
failureFlash:true/'无效的用户名或密码'
}),功能(req,res){
log(“身份验证成功”);
请求闪存(“成功”,“您已登录”);
res.redirect('/');
});
router.post('/login',passport.authenticate('local',函数(err,user,info){
控制台日志(“验证”);
控制台日志(err);
console.log(用户);
控制台日志(信息);
}),功能(req,res){
log(“身份验证成功”);
请求闪存(“成功”,“您已登录”);
res.redirect('/');
});

module.exports=路由器请检查此处的代码,其中有完整的示例演示passport身份验证。

嗨,Rajesh,代码是模块化的。这里有一个代码链接供您仔细查看。谢谢,第二个应该被评论。我试图调试显示我用于在ROUTE users.js router.post('/login',passport.authenticate('local',function(err,user,info){console.log(“authenticate”);console.log(err);console.log(user);console.log(info);}),function(req,res){console.log(“验证成功”);请求闪存(“成功”,“您已登录”);res.redire