搜索

首页  >  问答  >  正文

req.session.user - 属性“用户”;类型“Session”上不存在;尝试使用快速会话传递会话数据时出错

我正在尝试制作一个简单的登录表单,供用户登录网站,然后将他们的会话数据保存到会话 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粉593536104P粉593536104297 天前413

全部回复(1)我来回复

  • P粉203648742

    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"

    回复
    0
  • 取消回复