【问题标题】:passport-local cookie and session database handling护照本地cookie和会话数据库处理
【发布时间】:2020-04-27 00:53:38
【问题描述】:

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

我的环境是:

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

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

  • 快递
  • 快速会话
  • express-mysql-session
  • 护照
  • 本地护照
  • bcrypt

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

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

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

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

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

【问题讨论】:

    标签: node.js express session passport.js passport-local


    【解决方案1】:

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

    1. 必须将withCredential 方法添加到超级代理,以使其发送身份验证cookie:
        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. 这些模块会自动检索所有会话信息。但是,许多示例显示此调用返回到用户数据库以获取更多信息(权限、其他信息)。目标是避免在两个位置(会话数据库和用户配置文件数据库)拥有相同的信息,并避免这些信息不同步(当帐户关闭时等......)

    2. req.logout() 断开会话,但会话信息保留在数据库中。 以下问题使我走上了正轨:how to delete cookie on logout in express + passport js?。您需要使用 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();
      },
    

    会话断开,数据库清理,cookie 消失。

    【讨论】:

      猜你喜欢
      • 2019-06-23
      • 2014-06-04
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      相关资源
      最近更新 更多