это мой первый вопрос, и я устала искать ... возможно, это ошибка новичка, но я пробовала все, чтобы ее решить, но не нашла ответа.
Я создал новую локальную стратегию для паспорта следующим образом:
passport.use(new LocalStrategy({
usernameField: "username",
passwordField: "password"
}, async (username, password, done) => {
const user = await User.findOne({username: username});
if (!user) {
return done(null, false, { message: 'Este usuario no existe.' });
}
else {
const match = await user.matchPassword(password);
if(match) {
return done(null, user);
} else {
return done(null, false, { message: 'Usuario/Contraseña no correctos.' });
}
}
}));
И вот как я его называю:
router.post("/users/login", async (req, res) => {
dni = req.body.username;
usuario = await User.findOne({username: dni});
idUser = usuario._id;
configuracion = await Config.findOne({idUsuario: idUser});
delStatus = configuracion.deleteStatus;
banStatus = configuracion.banStatus;
if(configuracion){
if(banStatus){
req.flash("errors_msg", "Su usuario se encuentra bloqueado de nuestra aplicación, contacte con soporte para más información");
res.redirect("/");
}
else if(delStatus){
req.flash("errors_msg", "Este usuario está dado de baja de nuestra plataforma, en caso de error contacte con soporte");
res.redirect("/");
}
else{
passport.authenticate("local", function (user, error, info) {
console.log("2");
console.log(info);
if(error){
console.log(error);
req.flash("errors_msg", "ERROR: Usuario o contraseña incorrectos")
res.redirect("/users/login");
}
if(!user){
req.flash("errors_msg", "ERROR: Usuario o contraseña incorrectos")
res.redirect("/users/login");
}
req.logIn(user, function (err) {
if(error){
return next(err);
}
res.redirect("/");
})
});
}
}
else{
if(usuario){
id = consultaUsuario._id;
res.redirect("/users/verify?=" + id);
}
else{
req.flash("errors_msg", "Este usuario no existe, registrese o en caso de error, consulte con nuestro servicio de atención al cliente");
res.redirect("/users/register");
}
}
});
Но паспорт не запускается в любом случае ...
Кто-нибудь может мне помочь? Заранее спасибо!
Редактировать 1:
@ davidmwhynot, это самое точное:
LocalStrategy:
passport.use(new LocalStrategy({
usernameField: "username",
passwordField: "password",
passReqToCallback: true
}, async (res, username, password, done) => {
const user = await User.findOne({username: username});
idUsuario = user._id;
const configuracion = await Config.findOne({idUsuario: idUsuario});
if(configuracion){
if (configuracion.banStatus) {
return done(null, false, { message: "Su usuario se encuentra bloqueado de nuestra aplicación, contacte con soporte para más información"});
}
if (configuracion.deleteStatus) {
return done(null, false, { message: "Este usuario está dado de baja de nuestra plataforma, en caso de error contacte con soporte"});
}
}
if (!user) {
return done(null, false, { message: 'Este usuario no existe.' });
}
else if(!configuracion){
user.isConfig = false;
return user;
}
else {
const match = await user.matchPassword(password);
if(match) {
return done(null, user);
} else {
return done(null, false, { message: 'Usuario/Contraseña no correctos.' });
}
}
}));
И это код для входа в систему:
router.post("/users/login", passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/users/login',
failureFlash: true
}), async (req, res) => {
// This is not executed anyway, can´t see any param or even see a
//console.log
});
Я много чего пробовал, но ... никто не увенчался успехом, даже попытался passReqToCallback: true
на localStrategy, но тоже не удалось