我正在使用passport.js和passport-local-mongoose。当尝试登录时什么也没有发生,也没有错误消息。但是,当注册一切正常时,新用户将被添加到数据库中。
我也使用helmet.js实现了一些安全头文件。
app.use(
helmet.hsts({
maxAge: 63072000,
preload: true,
})
);
app.use(helmet.contentSecurityPolicy({
directives: {
connectSrc: ["'self'", 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js', 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js'],
defaultSrc: ["'self'", 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js', 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js'],
fontSrc: ["'self'"],
imgSrc: ["'self'", 'data:'],
scriptSrc: ["'self'", 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js', 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js'],
styleSrc: ["'self'",'https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css'],
frameSrc: ["'self'", 'https://www.instagram.com/', 'https://www.facebook.com/']
},
reportOnly: false,
}));
app.use(
helmet.referrerPolicy({
policy: ["strict-origin-when-cross-origin"]
})
);
app.use(helmet.xssFilter());
app.use(helmet.noSniff());
app.use(
helmet.frameguard({
action: "deny",
})
);
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(express.static("public"));
app.use(session({
secret: process.env.COOKIE_SECRET,
resave: true,
httpOnly: false,
saveUninitialized: true,
cookie:{
secure: true
}
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(User.createStrategy());
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});我试图在禁用所有标题的情况下登录,但似乎不起作用。
登录的post路径:
app.post("/login", function(req, res){
User.findOne({username: req.body.username}, function(err, foundUser){
if(foundUser){
const user = new User({
username: req.body.username,
password: req.body.password
});
passport.authenticate("local", function(err, user){
if(err){
console.log(err);
}
else{
if(user){
req.login(user, function(err){
res.redirect("/favourite");
});
} else{
res.redirect("/login");
}
}
})(req, res);
} else{
res.redirect("/login")
}
});
});login.ejs
<form action="/login" method="POST">
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" name="username">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" name="password">
</div>
<button type="submit" class="my-3 btn btn-dark">Log In</button>
</form>发布于 2021-08-27 08:54:44
您是否添加了一些console.log()语句来检查哪个步骤失败了?对我来说,这通常有助于识别代码在哪里停止了预期的工作,并检查数据是否如预期的那样。
我看到你在使用passport.use(User.createStrategy()),这需要passport-local-mongoose插件。您是否在User Mongoose模式中加载了该插件?
PS。前段时间我做了一个使用Passport登录的单文件示例,也许它可以帮助你。它使用的不是Mongoose,而是原生MongoDB驱动程序(https://github.com/allardvanderouw/express-api-passport-local-mongo-session-example/blob/master/server.js)。
https://stackoverflow.com/questions/68949630
复制相似问题