@dovid אמר בנוד bcrypt עם מלח משלי:
בעת ניסיון כניסה אני רוצה לבדוק שזה אכן הסיסמה
אצלי ה signIn עובד כך, הרי אני דורש ממי שמזדהה כתובת מייל (או שם משתמש) וסיסמא.
ראשית כל שולפים מהבסיס נתונים את המשתמש העונה למייל המבוקש, ואח"כ משווים את הסיסמא עם פונקציה יעודית.
(אח"כ אני נותן טוקן jwt)
exports.signin = (req, res) => {
User.findOne({
where: {
username: req.body.username
}
})
.then(user => {
if (!user) {
return res.status(404).send({ message: "משתמש לא נמצא." });
}
if (user.status) { //משתמשים חסומים וכדומה
return res.status(403).send({ message: user.status });
}
var passwordIsValid = bcrypt.compareSync(
req.body.password,
user.password
);
if (!passwordIsValid) {
return res.status(401).send({
accessToken: null,
message: "סיסמא שגויה!"
});
}
let expiresIn = 86400;
if (req.body.rememberMe){
expiresIn = 86400 * 365;
}
var token = jwt.sign({ id: user.id }, config.secret, {
expiresIn: expiresIn // 24 hours
});
var authorities = [];
var ability = [{
"action": 'read',
"subject": 'Auth'
}];
user.getRoles().then(async roles => {
for (let i = 0; i < roles.length; i++) {
authorities.push("ROLE_" + roles[i].name.toUpperCase());
}
roles.sort((a, b) => (a.roleId < b.roleId) ? 1 : 0);
let max = roles[0];
for (let i = 0; i <= ROLES.indexOf(max.name); i++) {
ability.push({
"action": 'manage',
"subject": ROLES[i]
});
}
res.status(200).send({
accessToken: token,
"userData": {
id: user.id,
"fullName": user.username,
username: user.username,
"avatar": "/img/13-small.d796bffd.png",
email: user.email,
"role": "admin",
roles: authorities,
"ability": ability,
},
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.dfsgdffhd.gghdfjhgjnjyue576uyjd"
})
});
})
.catch(err => {
res.status(500).send({ message: err.message });
});
};




