护照没有成功重定向
Passport not successfully redirecting
我从 odin 项目中学习了关于 passport 的教程并且它有效所以我决定在我自己的项目中实现我学到的东西,他们和我的区别在于我遵循了设计模式而他们没有而且我似乎无法找到为什么它没有响应的问题。
在我的登录页面中,我使用了电子邮件和密码,并且我多次尝试更改以下代码。
这是controller.js
//passport functions
passport.use(
new LocalStrategy((username, password, done) => {
User.findOne({ username: username }, (err, user) => {
console.log(user)
if (err) {
return done(err);
};
if (!user) {
return done(null, false, { msg: "Incorrect username" });
}
if (user.password !== password) {
return done(null, false, { msg: "Incorrect password" });
}
return done(null, user);
});
})
);
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
//end ofpassport functions
app.use(session({ secret: "cats",
resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.urlencoded({ extended: false }));
app.use(function(req, res, next) {
res.locals.currentUser = req.user;
next();
});
然后我从 routes.js 调用控制器对用户进行身份验证,但它一直失败并默认为 failredirecting
app.post('/signin', passport.authenticate("local",{
successRedirect:"/",
failureRedirect:'/signup'}))
默认情况下,LocalStrategy 希望在名为用户名和密码的参数中找到凭据。如果您的站点更喜欢以不同方式命名这些字段,可以使用选项来更改默认值。
req.body
中的参数名称应与自定义字段匹配,并且当存在空字段 usernameField
和 passwordField
时不调用 LocalStrategy
const customFields = {
usernameField : "email",
passwordField : "password"
}
passport.use(
new LocalStrategy(customFields ,(username, password, done) => {
User.findOne({ username: username }, (err, user) => {
console.log(user)
if (err) {
return done(err);
};
if (!user) {
return done(null, false, { msg: "Incorrect username" });
}
if (user.password !== password) {
return done(null, false, { msg: "Incorrect password" });
}
return done(null, user);
});
})
);
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
//end ofpassport functions
app.use(session({ secret: "cats",
resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.urlencoded({ extended: false }));
app.use(function(req, res, next) {
res.locals.currentUser = req.user;
next();
});
我从 odin 项目中学习了关于 passport 的教程并且它有效所以我决定在我自己的项目中实现我学到的东西,他们和我的区别在于我遵循了设计模式而他们没有而且我似乎无法找到为什么它没有响应的问题。 在我的登录页面中,我使用了电子邮件和密码,并且我多次尝试更改以下代码。
这是controller.js
//passport functions
passport.use(
new LocalStrategy((username, password, done) => {
User.findOne({ username: username }, (err, user) => {
console.log(user)
if (err) {
return done(err);
};
if (!user) {
return done(null, false, { msg: "Incorrect username" });
}
if (user.password !== password) {
return done(null, false, { msg: "Incorrect password" });
}
return done(null, user);
});
})
);
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
//end ofpassport functions
app.use(session({ secret: "cats",
resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.urlencoded({ extended: false }));
app.use(function(req, res, next) {
res.locals.currentUser = req.user;
next();
});
然后我从 routes.js 调用控制器对用户进行身份验证,但它一直失败并默认为 failredirecting
app.post('/signin', passport.authenticate("local",{
successRedirect:"/",
failureRedirect:'/signup'}))
默认情况下,LocalStrategy 希望在名为用户名和密码的参数中找到凭据。如果您的站点更喜欢以不同方式命名这些字段,可以使用选项来更改默认值。
req.body
中的参数名称应与自定义字段匹配,并且当存在空字段 usernameField
和 passwordField
const customFields = {
usernameField : "email",
passwordField : "password"
}
passport.use(
new LocalStrategy(customFields ,(username, password, done) => {
User.findOne({ username: username }, (err, user) => {
console.log(user)
if (err) {
return done(err);
};
if (!user) {
return done(null, false, { msg: "Incorrect username" });
}
if (user.password !== password) {
return done(null, false, { msg: "Incorrect password" });
}
return done(null, user);
});
})
);
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
//end ofpassport functions
app.use(session({ secret: "cats",
resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.urlencoded({ extended: false }));
app.use(function(req, res, next) {
res.locals.currentUser = req.user;
next();
});