例如我要進行密碼修改功能,有舊密碼新密碼,舊密碼的驗證與新密碼的修改分開。請問如何使新密碼的修改不執行?
router.get('/:userid', function(req, res,next) {
if(req.session.userid){
return next();
}
res.redirect('/login');
});
router.get('/:userid', function(req,res,next){
User.find(req.session.userid,function(err,doc){
res.render('changepassword',{
userid: req.session.userid,
user:doc
});
});
});
router.post("/:userid",function(req,res) {
User.findOne({
name: req.session.userid,
pwd: req.body.oldpwd
}, function (err, doc) {
if (err) {
r.error = err;
return;
}
if (doc) {
console.log('success');
} else {
console.log('fail');
return;
}
res.json(r);
});
});
//不想使得当旧密码验证不成功的时候让以下代码执行
router.post("/:userid",function(req,res) {
var u = {
pwd :req.body.pwd
};
var userid = req.session.userid;
if(userid && '' != userid) {
User.findOneAndUpdate(userid,u,function(err, docs) {
console.log('modify-----'+ docs);
res.redirect('/');
});
}
});
滿天的星座2017-05-24 11:33:27
回呼函數的參數加上next,驗證成功則next,驗證失敗則回傳失敗
router.post("/:userid",function(req,res,next) {
User.findOne({
name: req.session.userid,
pwd: req.body.oldpwd
}, function (err, doc) {
if (err) {
r.error = err;
return;
}
if (doc) {
console.log('success');
return next();
}
console.log('fail');
res.json(r);
});
});
//不想使得当旧密码验证不成功的时候让以下代码执行
router.post("/:userid",function(req,res,next) {
var u = {
pwd :req.body.pwd
};
var userid = req.session.userid;
if(userid && '' != userid) {
User.findOneAndUpdate(userid,u,function(err, docs) {
console.log('modify-----'+ docs);
res.redirect('/');
});
}
});
但其實可以合在一起,為什麼要分開呢? 例如:
router.get('/:userid', function(req, res,next) {
if(req.session.userid){
return User.find(req.session.userid,function(err,doc){
res.render('changepassword',{
userid: req.session.userid,
user:doc
});
});
}
res.redirect('/login');
});
为情所困2017-05-24 11:33:27
供參考:
1、router.post("/:userid",function(req,res) {
和
//不想使得當舊密碼驗證不成功的時候讓以下程式碼執行
router.post("/:userid", function(req,res) {
是重複的router,你需要把下面這段處理程式碼(修改密碼),放到上面去。
2、另外,可以考慮passwort.js做登入這塊的管理。
供參考。
Love MongoDB! Have fun!