您如何(如果可能)使用以下代码在网站中实现 Bcrypt 和 JWT?

How (If possible) do you implement Bcrypt and JWT in a website using the following code?

我现在正在 Node.js 学习一门课程,我正在完成一个 API 使用 JWT 进行身份验证的课程,Bcrypt.The 代码可以在下面的 link 中找到.代码相当简单,我完全理解,但我的问题是,如果不使用邮递员,这将如何用于网络应用程序?甚至可以使用 HTML 表单、按钮或前端的其他方式在 req.headers 中发送这些身份验证承载令牌吗?如果不使用 Passport,就没有办法实现这一目标吗?如果可能的话,请有人给我一个简短的答案,让我知道如何做,因为我在谷歌上搜索了几个小时,试图看看这种身份验证方法是否可以某种方式用于网络应用程序。

https://github.com/andrewjmead/node-course-v3-code/tree/master/task-manager/src

我使用您提供的 link 查看了您的代码。简短的回答是 YES 您可以从前端发送 req.headers.authorization 内的不记名令牌。

您发送它的方式取决于您的前端实现。

  1. 如果您使用 fetch API,您可以使用 fetch API 请求选项发送不记名令牌
fetch ('yoururl', {
    method: 'POST',  //your request verb
    body: JSON.stringify('yourObjectData'), //if making a post request
    headers: {
      "Content-Type": "application/json",
      "Authorization": `Bearer ${yourtoken}` //your token can then be accessed using req.headers.authorization 
    },
})

在此处查看有关如何使用 fetch api 的更多详细信息 https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

  1. 如果您使用 jquery,这个答案应该也有效

我很确定还有其他方法可以从前端发送令牌。我已经使用了提取 API.

如果不使用邮递员,这对于 Web 应用程序如何工作?

  1. 首先,您需要创建一个 HTML 表单/angular 应用程序,其中包含用户名和密码等登录输入
  2. 然后执行 ajax 调用(如果它的 html 应用程序)或服务调用(如果 angular)/users/login 并发布用户输入的值,您将得到成功验证的令牌。
  3. 然后将令牌存储在本地存储/cookie 中,然后显示仪表板页面。
  4. 当用户导航到其他页面时,如果其 angular 应用程序使用拦截器在每个请求上传递 Bearer 令牌。该应用程序将验证并提供 json 响应。

是否有可能在 req.headers 中使用 HTML 表单、按钮或其他方式从前端发送这些身份验证不记名令牌?

不使用 Passport 就无法实现吗?

  • 注意:使用 Passport 的优点:Passport 是 Node.JS 的身份验证中间件,它不针对任何特定的身份验证方法,像 OAuth、JWT 这样的身份验证方法是在 Passport 中通过策略模式实现的,所以这意味着您可以在不影响您的其他部分的情况下交换身份验证机制 application.Passport 使用策略,例如本地策略或随着社交网络的兴起,使用 OAuth 提供商(例如 facebook 或 twitter)进行单点登录

参考:这里有完整的例子https://www.toptal.com/angular/angular-6-jwt-authentication