我正在尝试使用passportjs来验证用户登录。当passport.authenticate在登录发布请求上运行时,网页将永远不会继续成功或失败路线。这是相关的控制器。
const User = require("../models/user");
const Message = require("../models/message");
const session = require("express-session");
const passport = require("passport");
const bcrypt = require("bcryptjs");
const LocalStrategy = require("passport-local").Strategy;
const { body, validationResult } = require("express-validator");
const asyncHandler = require("express-async-handler");
passport.use(
new LocalStrategy(async (username, password, done) => {
try {
const user = await User.findOne({ username: username });
if (!user) {
console.log("successfully found user");
return done(null, false, { message: "Incorrect username" });
}
if (user.password !== password) {
console.log("matching password");
return done(null, false, { message: "Incorrect password" });
}
return done(null, user);
} catch (err) {
return done(err);
}
})
);
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser(async (id, done) => {
try {
const user = await User.findById(id);
done(null, user);
} catch (err) {
done(err);
}
});
exports.get_user_signup = asyncHandler(async (req, res, next) => {
res.render("signup");
});
exports.post_user_signup = asyncHandler(async (req, res, next) => {
if (req.body.password !== req.body.confirmpassword) {
res.redirect("/sign-up");
}
const user = new User({
username: req.body.username,
password: req.body.password,
status: true,
});
await user.save();
res.redirect("/");
});
exports.get_user_login = (req, res, next) => {
res.render("login");
};
exports.post_user_login = [
(req, res, next) => {
passport.authenticate("local", {
successRedirect: "/",
failureRedirect: "/",
});
},
];
如果我在身份验证尝试之后进行重定向,它会立即重定向到该页面,并且用户未登录。在本地策略中放入 console.log 永远不会显示,所以我认为该功能从未运行过。
您可以使用 Node.js 护照身份验证快速下载简单干净的示例的克隆 https://github.com/rohit13807/nodejs-authentication-with-passportjs
如果需要更多细节或描述,请评论。