NodeJS authenticate()中间件删除所有会话密钥

brccelvz  于 2023-05-06  发布在  Node.js
关注(0)|答案(1)|浏览(130)

我把url保存在会话中的一个returnTokey中,只要不调用passport.authenticate()中间件,它就会一直存在会话中,调用这个中间件后,我的会话密钥就丢失了。这是我的isLoggedin函数,它将url保存在req.session.returnTo中:

isLoggedin: async (req, res, next) => {
    if (!req.isAuthenticated()) {
      req.session.returnTo = req.originalUrl;
      req.flash("error", "Please login");
      await req.session.save();
      return res.redirect("/login");
    }
    next();
  },

在呈现(“/login”)页面之后,它向(“/login”)发送一个post请求以验证用户。
这是post请求处理器,我有console.log session来显示中间件**passport.authenticate()**被调用前后session的值:

router
  .route("/login")
  .get(authentication.loginrender)
  .post(
    (req, res, next) => {
      console.log(req.session);
      next();
    },
    passport.authenticate("local", {
      failureFlash: false,
      failureRedirect: "/login",
    }),
    (req, res, next) => {
      console.log(req.session);
      next();
    },
    authentication.loginuser
  );

下面是登录后控制台的输出,authenticate之前会话中有**“returnTo”**,但在passport.authenticate()之后丢失:
CONSOLE OUTPUT IMAGE AFTER LOGGIN IN
这是我的app.js文件:

app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));
app.engine("ejs", ejsmate);
app.use(express.static(path.join(__dirname, "public")));
app.use(express.urlencoded({ extended: true }));
app.use(cookieparser());
const sessionConfig = {
  secret: "thisshouldbeabettersecret!",
  resave: false,
  saveUninitialized: true,
  cookie: {
    httpOnly: true,
    expires: Date.now() + 1000 * 60 * 60 * 24 * 7,
    maxAge: 1000 * 60 * 60 * 24 * 7,
  },
};
app.use(session(sessionConfig));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new localstrategy(User.authenticate()));
app.use(flash());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

有人能帮我吗?我真的很难解决这个问题,从过去的几天。

6qqygrtg

6qqygrtg1#

我面临着同样的错误,在搜索了很多之后,似乎保持会话可能会导致安全缺陷,所以自passport 6以来,身份验证自动导致会话擦除。
您可以解决此添加问题
keepSessionInfo:真
到你的护照。认证,但你会得到回安全问题。
为了解决这个问题,你需要以另一种方式存储这些值(例如redis)。

相关问题