繁体   English   中英

护照本地 cookie 和 session 数据库处理

[英]passport-local cookie and session database handling

我目前正在尝试为我当前的项目设置 oauth 服务。 作为这一切的新手,我已经阅读了很多关于这个主题的文章,但我仍然缺少一些文章。

我的环境是:

  • 服务器:节点、快递、护照
  • 身份验证:本地策略(使用我自己的帐户/密码)
  • 我有一个带有用户/密码的数据库(密码通过 bcrypt 运行)
  • web接口:react,服务器通过superagent访问

在我的 nodejs 服务器上,我正在使用这些模块:

  • 表示
  • 快速会话
  • express-mysql-会话
  • 护照
  • 本地护照
  • bcrypt

解决方案的不同部分都在起作用:我可以创建新用户,创建新会话,在 express-mysql-session 数据库中查看他们的内容。

但是,我对以下内容感到很困惑:

  1. 当我的 web 客户端尝试访问受保护的路由时,我似乎没有在请求中获得任何 cookie。 超级代理默认不会发送我的护照cookie吗? 我在某处读到,在单页应用程序中,jwt 可能更合适,这与这个问题有关吗?

  2. 尽管我阅读了所有内容,但我仍然对反序列化用户感到困惑。 我的理解是,使用本地护照解决方案,在访问时,web 客户端将发送 session cookie,其中包含 session Id。 Passport 将从数据库中获取有关此 session 的更多信息,然后继续处理请求。 这个 session 信息检索是否自动发生(在 express-mysql-session 中?)? 或者您是否必须在 deserializeUser 中“手动”执行此操作(许多示例显示User.findById调用)? 如果您必须“手动”执行此操作,这意味着您必须使用与该模块使用的连接不同的连接来访问 express-mysql-session 数据库?

  3. 要注销,是否 req.logout() 足以确保 session 完全从 session 数据库中删除?

到目前为止我找到的答案:

  1. 必须将withCredential方法添加到 superagent,以使其发送身份验证 cookies:
    res = await superagent
      .get(url)
      .withCredentials()
      .send();

在 CORS 方面,在服务器上,如果使用“cors”npm 模块,则需要“凭据”选项,例如:

app.use(cors({
  origin: ['http://localhost:3003'],
  methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
  credentials: true,
}));
  1. 这些模块会自动检索所有 session 信息。 但是,许多示例显示此调用返回到用户数据库以获取更多信息(权限、其他信息)。 目标是避免在两个位置(会话数据库和用户配置文件数据库)拥有相同的信息,并使这些信息不同步(当帐户关闭时等......)

  2. req.logout()断开 session 的连接,但 session 信息仍然存在于数据库中。 以下问题使我走上了正轨: 如何在 express + passport js 中删除注销时的 cookie? . 您需要使用 req.logout、res.session.destroy 和 res.clearCookie 来删除客户端 cookie:

router.post('/logout/',
  (req, res) => {
    req.logout();
    res.status(200).clearCookie('connect.sid', {
      path: '/',
      secure: false,
      httpOnly: false,
      domain: 'place.your.domain.name.here.com',
      sameSite: true,
    }).end();
    req.session.destroy();
  },

Session 已断开连接,数据库已清理,cookie 消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM