我正在尝试制作一个简单的登录表单,供用户登录网站,然后将他们的会话数据保存到会话 cookie 中。我正在使用express-session,在他们的文档中它给出了这个作为设置的示例:
app.post('/login', express.urlencoded({ extended: false }), function (req, res) { // login logic to validate req.body.user and req.body.pass // would be implemented here. for this example any combo works // store user information in session, typically a user id req.session.user = req.body.user // save the session before redirection to ensure page // load does not happen before session is saved req.session.save(function (err) { if (err) return next(err) res.redirect('/') }) }) })
但在我的代码中,我不断在“req.session.user”部分收到错误,其中显示:“属性“用户”在“会话和部分”类型上不存在”,即使我使用的是 Express-Session 文档中完全相同的代码。
我遵循文档中的所有说明,并将其放在程序顶部:
import session from 'express-session'; app.set('trust proxy', 1); app.use(session({ name: `First_test`, secret: 'secret_text', saveUninitialized: true, resave: true, cookie: { secure: false, maxAge: 960000 } }));
调试时我可以看到 req.session 内部确实没有“user”属性。
我已经搜索了 google 和 stackoverflow 但没有找到解决方案。我很可能错过了一些小步骤,我希望这里有人可以帮助教育我。
感谢您提前提供的帮助。
P粉2036487422024-02-05 00:14:28
从@types/express-session
包中我们可以看到
/** * This interface allows you to declare additional properties on your session object using [declaration merging](https://www.typescriptlang.org/docs/handbook/declaration-merging.html). * * @example * declare module 'express-session' { * interface SessionData { * views: number; * } * } * */ interface SessionData { cookie: Cookie; }
因此,您应该在会话对象上声明 user
属性,如下所示:
declare module 'express-session' { interface SessionData { user: string; } } app.post('/login', express.urlencoded({ extended: false }), function (req, res) { req.session.user = req.body.user })
软件包版本:"express-session": "^1.17.1"