首页 >web前端 >js教程 >使用 NodeJS 的身份验证系统

使用 NodeJS 的身份验证系统

Susan Sarandon
Susan Sarandon原创
2025-01-10 10:54:42132浏览

Authentication System Using NodeJS

介绍

身份验证是识别用户身份并授予他们访问应用程序提供的资源的过程。在后端开发中,
身份验证在授予或限制用户访问特定资源方面发挥着重要作用。

身份验证可以通过两种方式完成:-

  • 基于令牌的身份验证。

  • 基于会话的身份验证。

这里我们将讨论基于令牌的身份验证。

基于令牌的身份验证

基于令牌的身份验证是一种广泛使用的安全机制,可以在不影响安全性的情况下为用户提供强大的体验。

在基于令牌的身份验证中,当用户登录时,服务器会为用户生成唯一的令牌。服务器生成令牌后,会将其发送给客户端并存储在客户端系统本地。每当客户端发出请求时,此令牌都会随每个请求一起验证用户的身份。

认证流程

  1. 请求- 当用户登录应用程序时,浏览器使用用户凭据向服务器发出请求。

  2. 验证 - 当请求到达服务器时,它会验证用户并生成一个称为令牌的密钥,并通过 HTTP 将其发送给用户。
    通常,令牌以 JWT [jsonWebTokens] 开放标准发送,其中包含标头、有效负载、签名。

  3. 验证令牌 - 当用户收到令牌密码时,它会保存在客户端的浏览器上,因为每当用户发出请求时它都有助于验证身份。该令牌的生命周期很短,只有 15-60 分钟,该令牌也称为访问令牌代码。如果用户无法使用访问令牌代码,则会请求刷新令牌代码,该代码会在系统中保留 3-4 天。

  4. 响应 - 验证完成后,令牌将授予或限制用户访问特定内容。

示例
让我们举个例子,我们将使用注册和登录方法来实现基于令牌的身份验证。

首先,我们将为用户创建注册模块的功能:-

第 1 步:- 注册用户
注册使用从用户收集数据来创建帐户

// FIRSTLY, WE'LL SELECT THE REGISTER FORM
const form = document.querySelector(".register");

// ADDING EVENT LISTENER TO FORM TO COLLECT THE VALUES FROM USER
form.addEventListener("submit", (e) => {

  e.preventDefault();
  const username = e.target.username.value;
  const email = e.target.email.value;
  const password = e.target.password.value;

});

STEP2:- 加密密码

在将用户数据保存到数据库之前,为了安全起见,我们首先需要对密码进行加密,然后将其保存到数据库。

为了加密密码,我们使用npm包bcrypt

首先,我们需要通过在终端中写入来安装软件包:-
npm install bcrypt

现在,我们将像这样对密码进行哈希处理

// FIRSTLY, WE'LL SELECT THE REGISTER FORM
const form = document.querySelector(".register");

// ADDING EVENT LISTENER TO FORM TO COLLECT THE VALUES FROM USER
form.addEventListener("submit", (e) => {

  e.preventDefault();
  const username = e.target.username.value;
  const email = e.target.email.value;
  const password = e.target.password.value;

});

bcrypt.hash 是一个用盐轮对密码进行哈希处理的函数。每当两个用户中的任何一个具有相同的密码时,它都会生成不同的散列密钥。

登录功能

当任何用户尝试登录时,它会从数据库中检索哈希密码,并将其与用户在登录期间给出的密码进行比较

//  IMPORTING BCRYPT MODULE
const bcrypt=require('bcrypt');


// ASSIGNING USERS PASSWORD 
const plainPassword=userPassword

// ENCRYPTING PASSWORD
// BASIC SYNTAX
// bcrypt.hash(plainTextPassword,salt_rounds)

const hashedPassword=bcrypt.hash(plainPassword,10);

if(!hashedPassword){
    throw new Error('Enable to generate password')
}

// NOW WE WILL SAVE USER DETAILS AND PASSWORD TO DATABASE
console.log('Hashed Password is : ',hashedPassword)

以上是使用 NodeJS 的身份验证系统的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn