req.session.user - 属性'用户”;类型'Session”上不存在;尝试使用快速会话传递会话数据时出错
P粉593536104
P粉593536104 2024-02-04 09:05:25
0
1
448

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

全部回复(1)
P粉203648742

@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"

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板