使用 Express 后端验证 Vuejs 前端

Authenticating a Vuejs frontend with an Express Backend

当客户端和服务器位于不同的项目中时,我正在寻找有关实现身份验证的一些建议。

服务器

此 API 是作为 Express 服务器构建的。它具有使用 MySQL 数据库进行 CRUD 操作的路由。它还有一个用户模型,利用 bcrypt 来加密密码。在这个项目中没有前端。

客户

这是一个用vue-cli做的Vue项目,点击上面的API获取数据显示

问题

我需要添加身份验证。我在想我会用 express-session 来做这个,但我对它的工作原理有点困惑。我看过的所有教程都将 express-sessionpassport 结合使用。这看起来不错,但在所有示例中 passport 转发到服务器上的登录页面。这通常是用 handlebars 或其他一些模板框架编写的。我不确定最佳实施方式,因为登录页面位于客户端项目中。

我认为它是如何工作的(我错过了什么吗?)

我最初的印象是对于新用户 express-session 会创建一个令牌,我会保存在 users table 中(可能在登录时生成并临时存储) .一旦用户使用正确的密码登录,此令牌将传递给客户端以存储为 cookie。当客户端想要访问受限数据时,它会将令牌作为身份验证 header 传递给服务器以获得权限。

问题

  1. 既然我的项目是分开的,passport 对我的用例仍然有用吗?
  2. 在服务器上创建 session cookie 并将令牌发送到客户端作为对客户端登录的响应是否安全 POST?
  3. 我需要在数据库中存储 session 令牌吗?
  4. 还有更好的选择吗?

在我的项目中,我有几乎相同的设置,最后我使用 JWT 生成访问令牌。

循环从用户向我的登录端点发送 his/her 电子邮件和密码开始。

在这个阶段,我使用一些秘密字符串对密码进行哈希处理,从数据库中获取用户并检查身份验证是否成功。

之后我生成了一个设置了过期时间的访问令牌,我希望所有受保护的路由都有这个访问令牌。

通过这种方法,您可以轻松实现刷新令牌不时交换,将刷新令牌保存在您的数据库中。

这很简单,有助于您了解身份验证过程是如何完成的。

jsonwebtoken