【发布时间】:2021-01-19 02:33:51
【问题描述】:
当客户端和服务器位于不同的项目中时,我正在寻找一些关于实施身份验证的建议。
服务器
此 API 是作为 Express 服务器构建的。它具有用于 MySQL 数据库的 CRUD 操作的路由。它还有一个使用bcrypt 加密密码的用户模型。在这个项目中没有前端。
客户
这是一个使用 vue-cli 制作的 Vue 项目,并点击上述 API 以获取要显示的数据。
问题
我需要添加身份验证。我在想我会用express-session 来做这件事,但我对它的工作原理有点困惑。我见过的所有教程都将express-session 与passport 结合使用。这看起来不错,但在所有示例中,passport 转发到服务器上的登录页面。这通常是用handlebars 或其他一些模板框架编写的。由于登录页面位于客户端项目中,因此我不确定最佳实施方式。
我认为它是如何工作的(我错过了什么吗?)
我最初的印象是,对于新用户express-session 会创建一个令牌,我会保存在users 表中(可能在登录时生成并临时存储)。一旦用户使用正确的密码登录,这个令牌就会被传递给客户端以存储为 cookie。当客户端想要访问受限数据时,它会将令牌作为 Authentication 标头传递给服务器以获得权限。
问题
- 由于我的项目是分开的,
passport对我的用例仍然有用吗? - 在服务器上创建会话 cookie 并将令牌发送到客户端作为对客户端登录 POST 的响应是否安全?
- 是否需要将会话令牌存储在数据库中?
- 有更好的选择吗?
【问题讨论】:
标签: express authentication cookies passport.js express-session