【发布时间】:2020-07-19 01:23:36
【问题描述】:
这是我的第一个问题,我有点厌倦搜索......也许这是一个新手错误,但我已经尝试了一切来解决它,但没有找到答案。
我已经建立了这样的护照新本地策略:
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 这是最准确的:
本地策略:
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
});
我尝试了很多东西,但是...没有人成功,甚至在 localStrategy 上尝试过passReqToCallback: true,但也没有成功
【问题讨论】:
标签: javascript node.js asynchronous callback passport.js