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
相关产品推荐
相关产品推荐

