Javascript 为什么passport.authenticate没有呼叫?

Javascript 为什么passport.authenticate没有呼叫?,javascript,node.js,asynchronous,callback,passport.js,Javascript,Node.js,Asynchronous,Callback,Passport.js,这是我的第一个问题,我有点厌倦了搜索…也许这是一个新手的错误,但我已经尝试了一切来解决它,但没有找到答案 我已经建立了passport新的本地策略,如下所示: passport.use(new LocalStrategy({ usernameField: "username", passwordField: "password" }, async (username, password, done) => { const user = await User.f

这是我的第一个问题,我有点厌倦了搜索…也许这是一个新手的错误,但我已经尝试了一切来解决它,但没有找到答案

我已经建立了passport新的本地策略,如下所示:

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");
        }
    }
});
但passport并没有启动

有人能帮我吗?提前谢谢


编辑1:

@DavidWhynot这不是最准确的:

本地策略:

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
,但也没有成功

您需要将身份验证策略作为中间件添加到登录路径中:

router.post(
“/users/login”,
passport.authenticate('local'{
successRedirect:“/”,
failureRedirect:“/users/login”,
failureFlash:“无效的用户名或密码。”
}),
异步(请求、恢复)=>{
//现在,您不需要为用户查询数据库
//应已根据要求提供:
var idUser=req.user.id;
}
);
您还应该将检查用户是否被禁止的逻辑移动到您的本地策略


编辑:这里有一个更新的本地策略,包括检查用户是否有配置且未被禁止的所有逻辑

编辑2:


转发器(
“/users/login”,
passport.authenticate('local'{
successRedirect:“/”,
failureRedirect:“/users/login”,
}),
异步(请求、恢复)=>{
如果(!请求用户配置){
//const id=consultaUsuario.\u id;
请求注销(请求用户);
const id=请求用户。\u id;
req.user=null;
res.redirect('/users/verify?='+id);
}否则{
res.redirect('/');
}
}
);
passport.use(
新本地策略(
{
usernameField:'用户名',
passwordField:'密码',
},
异步(用户名、密码、完成)=>{
const user=wait user.findOne({username:username});
如果(!用户){
返回完成(null,false{
信息:“Este usuario不存在。”,
});
}
const match=wait user.matchPassword(密码);
如果(!匹配){
返回完成(null,false{
信息:“Usuario/Contraseña无更正。”,
});
}
const configuracion=await Config.findOne({
idUsuario:用户。\u id,
});
如果(!configuracion){
user.configuration=false;
}否则{
const delStatus=configuracion.deleteStatus;
const banStatus=configuracion.banStatus;
user.configuration=true;
如果(银行状态){
完成(null,false{
信息:
“Su usuario se Encuntera bloqueado de nuestra aplicación,联系más información的代表”,
});
}else if(delStatus){
完成(null,false{
信息:
“这是一个新的平台,一个错误的通讯录”,
});
}
}
完成(空,用户);
}
)
);

您需要将身份验证策略作为中间件添加到登录路径中:

router.post(
“/users/login”,
passport.authenticate('local'{
successRedirect:“/”,
failureRedirect:“/users/login”,
failureFlash:“无效的用户名或密码。”
}),
异步(请求、恢复)=>{
//现在,您不需要为用户查询数据库
//应已根据要求提供:
var idUser=req.user.id;
}
);
您还应该将检查用户是否被禁止的逻辑移动到您的本地策略


编辑:这里有一个更新的本地策略,包括检查用户是否有配置且未被禁止的所有逻辑

编辑2:


转发器(
“/users/login”,
passport.authenticate('local'{
successRedirect:“/”,
failureRedirect:“/users/login”,
}),
异步(请求、恢复)=>{
如果(!请求用户配置){
//const id=consultaUsuario.\u id;
请求注销(请求用户);
const id=请求用户。\u id;
req.user=null;
res.redirect('/users/verify?='+id);
}否则{
res.redirect('/');
}
}
);
passport.use(
新本地策略(
{
usernameField:'用户名',
passwordField:'密码',
},
异步(用户名、密码、完成)=>{
const user=wait user.findOne({username:username});
如果(!用户){
返回完成(null,false{
信息:“Este usuario不存在。”,
});
}
const match=wait user.matchPassword(密码);
如果(!匹配){
返回完成(null,false{
信息:“Usuario/Contraseña无更正。”,
});
}
const configuracion=await Config.findOne({
idUsuario:用户。\u id,
});
如果(!configuracion){
user.configuration=false;
}否则{
const delStatus=configuracion.deleteStatus;
const banStatus=configuracion.banStatus;
user.configuration=true;
如果(银行状态){
完成(null,false{
信息:
“Su usuario se Encuntera bloqueado de nuestra aplicación,联系más información的代表”,