我的auth应用不会将数据保存到会话
使用Express Mongoose和Passport JS创建验证应用程序。 使用NodeMailer Server添加邮件验证后,从Req.user添加用户到res.locals.currentuser可以从中间件中看到。在添加电子邮件验证之前,它可以正常运行。
app.use(express.urlencoded({ extended: true }));
app.use(session(sessionObject));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use((req, res, next) => {
res.locals.currentUser = req.user;
res.locals.success = req.flash("success");
res.locals.error = req.flash("error");
next();
});
app.get("/", (req, res) => {
console.log(res.locals);
res.render("index");
});
app.get("/login", (req, res) => res.render("login"));
app.post(
"/login",
passport.authenticate("local", {
failureFlash: true,
failureRedirect: "/login",
}),
(req, res) => {
req.flash("success", "Welcome Back!");
res.redirect("/");
console.log(req.user);
}
);
Creating Auth application using express mongoose and passport js.
after adding mail verification using nodemailer server sptoped adding user from req.user to res.locals.currentUser can be seen from middleware. before adding email verification it was functioning correctly.
app.use(express.urlencoded({ extended: true }));
app.use(session(sessionObject));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use((req, res, next) => {
res.locals.currentUser = req.user;
res.locals.success = req.flash("success");
res.locals.error = req.flash("error");
next();
});
app.get("/", (req, res) => {
console.log(res.locals);
res.render("index");
});
app.get("/login", (req, res) => res.render("login"));
app.post(
"/login",
passport.authenticate("local", {
failureFlash: true,
failureRedirect: "/login",
}),
(req, res) => {
req.flash("success", "Welcome Back!");
res.redirect("/");
console.log(req.user);
}
);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题是:我在本地环境中工作,并将会话cookie设置为
secure
。由于Localhost在HTTP而不是HTTPS上运行,因此浏览器在重定向后没有将Session Cookie发送到应用程序,这阻止了Passport加载会话数据并创建
req.user
键。The problem was: I was working in a local environment and had set the session cookie to
secure
.Since Localhost runs on HTTP and not HTTPS, the browser was not sending the session cookie to the Application after the App redirected, which prevented Passport from loading the session data and creating the
req.user
key.req
和res
在请求结束时的所有内容,仅req.session
写入会话商店(session> Session> Session object < /code>),然后从那里转到下一个请求。
如果要将当前用户保留在会话中,请将其写入
req.session.currentuser
。然后,您需要Passport.js
和req.user
仅在建立会话的第一个请求中。Everything in
req
andres
expires at the end of the request, onlyreq.session
is written to the session store (sessionObject
) and from there carried over to the next request.If you want to keep the current user in the session, write it to
req.session.currentUser
. Then you needpassport.js
andreq.user
only during the first request, where the session is established.