You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Passport本地策略认证后Express路由中req.user未定义问题

Passport-local认证后req.user未定义问题

问题概述

我通过用户名和密码对HTTP请求进行认证,认证流程看似正常,但Express路由中无法获取用户数据。相关问题指向session配置问题,我已遵循Passport官方密码认证教程,但仍未找到问题所在。

相关未解决问题

  • Unable to access req.user in Passport.js on Express.js
  • NodeJS Express Passport - req.user is undefined

测试用仓库

quentinkrammer/stack-express-local-passport

问题后端代码

import express from "express";
import session from "express-session";
import memoryStore from "memorystore";
import passport from "passport";
import { Strategy as LocalStrategy } from "passport-local";

const MemoryStore = memoryStore(session);
const store = new MemoryStore({
  checkPeriod: 3600000,
});

passport.use(
  new LocalStrategy(function verify(username, password, cb) {
    if (username === "Jim" && password === "123") {
      console.log("Local Strategy - SUCCESS");
      const user = { user: "Jim", role: "Admin", id: "42" };
      return cb(null, user);
    }
    console.log("Local Strategy - FAILED");
    return cb(null, false, { message: "Incorrect username or password." });
  }),
);
passport.serializeUser(function (user, cb) {
  console.log("Serializer: ", user);
  cb(null, user);
});
passport.deserializeUser(function (user, cb) {
  console.log("DeserializeUser: ", user);
  cb(null, user as Record<string, string>);
});

const authRouter = express.Router();
authRouter.post(
  "/login",
  passport.authenticate("local", {
    failureMessage: true,
    failureRedirect: "/notAuthed",
  }),
  function (req, res) {
    console.log(
      "Successfull authentication - User: ",
      JSON.stringify(req.user),
    );
    res.redirect("/authed");
  },
);
authRouter.get("/authed", function (req, res, next) {
  // Question: Why is the user undefined? I need the user to do authorization :(
  console.log("authRouter - User: ", JSON.stringify(req.user)); // req.user = undefined
  res.json("Login successfull");
});
authRouter.get("/notAuthed", function (req, res, next) {
  res.json("Login failed");
});

const app = express();
app.use(cors({ origin: "*" }));
app.use(express.urlencoded({ extended: false }));
app.use(
  session({
    secret: "keyboard cat",
    resave: false,
    cookie: { maxAge: 3600000 },
    store,
    // not sure if this is needed
    saveUninitialized: false,
  }),
);
app.use(passport.authenticate("session"));
app.use("/", authRouter);
app.listen(3000);

后端控制台日志

后端控制台日志

补充说明

据我了解,express-session包会在客户端Cookie中存储会话,但我的代码中Cookie并未发送到客户端,原因未知。


内容的提问来源于stack exchange,提问作者quentinkrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:55:04