Итак, у меня есть этот роутер, где, когда администратор добавляет нового сотрудника, пароль хэшируется, он отлично работает в маршруте добавления / персонала, но когда администратор пытается обновить пароль, пароль больше не получает хэш, плюс когда этот пользователь логин с этим новым паролем, он всегда говорит неверный пароль (очевидно, который я определил), может кто-нибудь, пожалуйста, помогите мне?
//Adding the staff which works perfectly fine
router.post(
"/add/staff",
passport.authenticate("jwt", { session: false }),
(req, res) => {
if (req.user.isAdmin === true) {
const newUser = new User({
name: req.body.name,
email: req.body.email,
role: req.body.role,
password: req.body.password
});
if (req.body.adminCode === "admin123") {
newUser.isAdmin = true;
}
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if (err) {
res.json({ success: false, msg: "Failed to add user" });
} else {
newUser.password = hash;
newUser
.save()
.then(user => {
res.json({ success: true, msg: "User added" });
})
.catch(ex => {
return res.status(500).send("Something went wrong");
});
}
});
});
} else {
return res.json("Acess denied");
}
}
);
//The update route which does not hash the password
router.put(
"/update/:id",
passport.authenticate("jwt", { session: false }),
(req, res) => {
if (req.user.isAdmin === true) {
User.update(
{ _id: req.params.id },
{
name: req.body.name,
email: req.body.email,
role: req.body.role,
password: req.body.password,
password2: req.body.password2
}
)
.then(success => res.json({ msg: "Updated Successfully" }))
.catch(err => res.json(err));
}
}
);
А также я использую паспорт и JWT
const JwtStrategy = require("passport-jwt").Strategy;
const ExtractJwt = require("passport-jwt").ExtractJwt;
const mongoose = require("mongoose");
const User = mongoose.model("users");
const keys = require("./dbSecretKeys");
let opts = {};
// opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme("jwt");
opts.secretOrKey = keys.secretOrKey;
module.exports = passport => {
passport.use(
new JwtStrategy(opts, (jwt_payload, done) => {
User.findById(jwt_payload.id)
.then(user => {
if (user) {
return done(null, user);
}
return done(null, false);
})
.catch(err => console.log(err));
})
);
};
Это тот, который я пробовал
router.put(
"/update/:id",
passport.authenticate("jwt", { session: false }),
(req, res) => {
if (req.user.isAdmin === true) {
User.updateOne(
{ _id: req.params.id },
{
name: req.body.name,
email: req.body.email,
role: req.body.role,
password: req.body.password
}
)
.then(userUpdateData => {
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(userUpdateData.password, salt, (err, hash) => {
if (err) {
res.json({ success: false, msg: "Failed to update user" });
} else {
userUpdateData.password = hash;
userUpdateData
.save()
.then(user => {
res.json({ success: true, msg: "User updated" });
})
.catch(ex => {
return res.status(500).send("Something went wrong");
});
}
});
});
})
.catch(err => res.json(err));
} else {
return res.json("Access Denied");
}
}
);