首页 > 解决方案 > Passportjs 未在会话中保存用户(仅在生产中)

问题描述

我正在尝试使用用户详细信息创建会话,所以当我这样做时,req.session.passport.user我会获取用户信息

问题是ONLY IN PRODUCTION,当会话与护照数据一起保存时,如下所示:

{"cookie":{"originalMaxAge":600000,"expires":"2021-06-04T16:36:36.571Z","httpOnly":true,"path":"/"},"passport":{"user":{"_id":"60ba144026959b0015808704","wishlist":[],"compare_list":[],"password":"$2a$10$rXZFdD0k2osgy.JUSTRDz.lSnBTBbr/v5uijUcafwNdAZnZ7jE/D6","email":"alcoholmart@gmail.com","first_name":"Jack","last_name":"Tan","__v":0,"isAuthenticated":true}}}

但是当我记录输出时,我得到了这个:

Session {
2021-06-04T16:26:37.422570+00:00 app[web.1]: cookie: {
2021-06-04T16:26:37.422571+00:00 app[web.1]: path: '/',
2021-06-04T16:26:37.422572+00:00 app[web.1]: _expires: 2021-06-04T16:36:37.158Z,
2021-06-04T16:26:37.422573+00:00 app[web.1]: originalMaxAge: 600000,
2021-06-04T16:26:37.422574+00:00 app[web.1]: httpOnly: true
2021-06-04T16:26:37.422574+00:00 app[web.1]: }
2021-06-04T16:26:37.422575+00:00 app[web.1]: }

顺便说一句,我使用 Heroku

这是我的主要代码:

app.use(
  session({
    resave: false,
    saveUninitialized: false,
    secret: process.env.MONGO_SECRET,
    cookie: { maxAge: 600000 },
    store: MongoStore.create({
      mongoUrl: process.env.MONGO_URI,
    }),
  })
);

app.use(passport.initialize());
app.use(passport.session());

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cors());

我如何处理护照:

const passport = require("passport");
const User = require("../models/users");

passport.serializeUser(function (user, done) {
  done(null, user);
});

passport.deserializeUser(function (email, done) {
  User.findOne({ email }).exec((err, user) => {
    done(err, user);
  });
});

// Email authentication
const Signin = require("./signin");
const Signup = require("./signup");
const GoogleLogin = require("./google/signin");
const GoogleRegister = require("./google/signup");

passport.use("local-signin", Signin);
passport.use("local-signup", Signup);
passport.use("google-signin", GoogleLogin);
passport.use("google-signup", GoogleRegister);

module.exports = passport;

我尝试了我发现的一百万种不同的东西,但没有任何效果

同样,它只发生在生产中,如果这有帮助,那就是 Heroku,但也尝试过 Vercel

非常感谢,如果您需要任何其他帮助我,请告诉我!

标签: node.jsexpressauthenticationsessionpassport.js

解决方案


推荐阅读