首页 > 解决方案 > 使用 Express 后端对 Vuejs 前端进行身份验证

问题描述

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

服务器

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

客户端

这是一个 Vue 项目,使用vue-cli上面的 API 来获取要显示的数据。

问题

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

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

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

问题

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

标签: expressauthenticationcookiespassport.jsexpress-session

解决方案


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

该循环从用户将他/她的电子邮件和密码发送到我的登录端点开始。

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

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

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

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

jsonwebtoken


推荐阅读