【发布时间】:2020-04-27 00:53:38
【问题描述】:
我目前正在尝试为我当前的项目设置 oauth 服务。作为这一切的新手,我已经阅读了很多关于这个主题的文章,但我仍然缺少一些文章。
我的环境是:
- 服务器:节点、快递、护照
- 身份验证:本地策略(使用我自己的帐户/密码)
- 我有一个带有用户/密码的数据库(密码通过 bcrypt 运行)
- web 界面:react,服务器通过 superagent 访问
在我的 nodejs 服务器上,我正在使用这些模块:
- 快递
- 快速会话
- express-mysql-session
- 护照
- 本地护照
- bcrypt
解决方案的不同部分都在起作用:我可以创建新用户、创建新会话、在 express-mysql-session 数据库中查看他们的内容。
但是我对以下内容很困惑:
当我的 Web 客户端尝试访问受保护的路由时,我似乎没有在请求中获得任何 cookie。是不是超级代理默认不会发送我的护照cookie?我在某处读到,在单页应用程序中,jwt 可能更合适,这与这个问题有关吗?
尽管我阅读了所有内容,但我仍然对反序列化用户感到困惑。我的理解是,使用本地护照解决方案,在访问时,Web 客户端将发送会话 cookie,其中包含会话 ID。 Passport 将从数据库中获取有关此会话的更多信息,然后继续处理请求。此会话信息检索是否自动发生(在 express-mysql-session 中?)?还是您必须在 deserializeUser 中“手动”执行此操作(许多示例显示
User.findById调用)?如果您必须“手动”执行此操作,则意味着您必须使用该模块使用的另一个连接来访问 express-mysql-session 数据库?要注销,req.logout() 是否足以确保从会话数据库中完全删除会话?
【问题讨论】:
标签: node.js express session passport.js passport-local