express - 使用 Express 后端对 Vuejs 前端进行身份验证
问题描述
当客户端和服务器位于不同的项目中时,我正在寻找一些关于实施身份验证的建议。
服务器
这个 API 是作为 Express 服务器构建的。它具有使用 MySQL 数据库进行 CRUD 操作的路由。它还有一个bcrypt
用于加密密码的用户模型。在这个项目中没有前端。
客户端
这是一个 Vue 项目,使用vue-cli
上面的 API 来获取要显示的数据。
问题
我需要添加身份验证。我想我会用 . 来做这个express-session
,但我对它的工作原理有点困惑。我见过的所有教程都express-session
与passport
. 这看起来不错,但在所有示例中,都passport
转发到服务器上的登录页面。这通常是用handlebars
其他模板框架编写的。由于登录页面位于客户端项目中,因此我不确定最佳实施方式。
我认为它是如何工作的(我错过了什么吗?)
我最初的印象是,对于新用户express-session
会创建一个我会保存在users
表中的令牌(可能在登录时生成并临时存储)。一旦用户使用正确的密码登录,这个令牌就会被传递给客户端以存储为 cookie。当客户端想要访问受限数据时,它会将令牌作为身份验证标头传递给服务器以获得许可。
问题
- 由于我的项目是分开的
passport
,对我的用例仍然有用吗? - 在服务器上创建会话 cookie 并将令牌发送给客户端作为对客户端登录 POST 的响应是否安全?
- 我需要将会话令牌存储在数据库中吗?
- 有更好的选择吗?
解决方案
在我的项目中,我的设置几乎相同,最后我使用 JWT 生成访问令牌。
该循环从用户将他/她的电子邮件和密码发送到我的登录端点开始。
在这个阶段,我使用一些秘密字符串对密码进行哈希处理,从数据库中获取用户并检查身份验证是否成功。
之后,我生成了一个设置了过期时间的访问令牌,并且我希望在所有受保护的路由中都有这个访问令牌。
使用这种方法,您可以轻松实现不时交换刷新令牌,将刷新令牌保存在数据库中。
这非常简单,有助于您了解身份验证过程是如何完成的。
推荐阅读
- c# - 如何继续重用计时器
- python-3.x - 使用 pandas.DataFrame.plot.scatter() 的 Matplotlib 警告
- c# - 无法从 SQL 中检索 pdf 文件
- java - 创建一个 ImageView 对象矩阵
- r - 带有多个折线元素的传单导致巨大的 HTML
- python - 得分前五名
- .net - 从在线工具返回的具有相同名称的类导致错误
- kotlin - 在 tornadofx 中将组合框的项目显示为自定义节点
- r - R选择具有最小数字和NA的行
- redis - PHPUnit 和 Magento Bootstrap 致命错误:未捕获的 CredisException