首页 > 解决方案 > 更改页面时会话丢失,Passport.js

问题描述

我有一些问题要让我的会话在每个页面之间保持活跃。我正在使用快递、节点和护照。

护照配置,在我尝试登录时对我进行了很好的验证。

const db = require("../models");
const User = db.users;
const bcrypt = require("bcrypt");
const localStrategy = require("passport-local").Strategy;

module.exports = function (passport) {

  passport.use(
    new localStrategy(
      {
        usernameField: "email",
        passwordField: "password",
      },
      function (username, password, done) {
        User.findOne({ where: { email: username } }).then((user) => {
          if (!user) return done(null, false);
          bcrypt.compare(password, user.password, (err, result) => {
            if (err) throw err;
            if (result === true) return done(null, user);
            else return done(null, false);
          });
        });
      }
    )
  );

  passport.serializeUser((user, done) => {
    done(null, user.id);
  });

  passport.deserializeUser((id, done) => {
    User.findOne({ id: id }, (err, user) => {
      done(err, user);
    });
  });
};

登录功能:

exports.login = (req, res, next) => {
  passport.authenticate("local", (err, user, info) => {
    if (err) throw err;
    if (!user) res.send("Impossible de trouver cet utilisateur");
    else {
      req.logIn(user, (err) => {
        if (err) throw err;
        //res.send('Authentification réussie.');
        const session = req.session;
        session.user = req.user;
        console.log(req._passport.session) //Send { user: XX}
        res.send(user);
        console.log(req.session)
      });
    }
  })(req, res, next);
};

这也在我的 app.js 中(server.js 等效)

require("dotenv").config({ path: "./config/.env" });
require("./middleware/passport-config")(passport);
app.use(session({
    secret: process.env.SESSION_SECRET,
    resave: true,
    saveUninitialized: true,
    cookie: {
      maxAge: 1000 * 60 * 60 * 24 // = 1day
    },
  })
);
app.use(cookieParser(process.env.SESSION_SECRET));
app.use(passport.initialize());
app.use(passport.session());

尝试发送会话中的内容时,如果我更改页面,它总是空的。如果需要更多信息,我会更新这篇文章。提前致谢

标签: node.jsexpresspassport.js

解决方案


推荐阅读