Javascript 为什么passport.authenticate没有呼叫?
这是我的第一个问题,我有点厌倦了搜索…也许这是一个新手的错误,但我已经尝试了一切来解决它,但没有找到答案 我已经建立了passport新的本地策略,如下所示: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.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的代表”,