使用 PostgreSQL、Sequelize 和 Express.js 进行 Node.js 认证
作者:Racheal Kuranchie
来源:https://medium.com/@rachealkuranchie/node-js-authentication-with-postgresql-sequelize-and-express-js-20ae773da4c9
使用 PostgreSQL、Sequelize 和 Express.js 进行 Node.js 认证
使用 JSON Web Token(JWT)和 Cookie-Parser 进行用户认证
在本文中,我们将讨论用户注册和登录,通过使用 PostgreSQL 作为数据库、Sequelize 作为对象关系映射器(ORM),以及 Express.js 作为服务器,结合 Cookie-Parser 设置 cookie 和 JSON Web Token(JWT)。
理解概念
用户注册是应用程序中的一个相关步骤,因此涉及到认证和授权的概念。认证和授权是出于安全目的的要求。
这两个概念经常交替使用,这使得难以区分你想要实现的功能以及它所需的内容。
在我们深入认证之前,让我们澄清这两个概念之间的区别。认证是确定用户是否是他们声称的那个人。通过这一点,它检查数据库以查看用户的凭据是否与数据库中授权用户的凭据匹配。相比之下,授权指定数据用户可以访问你的应用程序。
Cookies 是在请求中发送到 Web 浏览器的小数据片段。它们作为键值对存储在 Web 浏览器中。键作为给特定 cookie 命名的名称。值表示所需的特定数据。Cookies 在大多数应用程序中都是必不可少的。例如,cookies 可以保持用户登录到你的应用程序。对于这个应用程序,我们将使用 Cookie-Parser 和 JSON Web Token 生成一个令牌,用作 cookie 的值。
示例 cookie — admin: ydfgyfgeuygfegyfgirgcfygfyhgcyg
JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式来安全地传输信息并在各方之间作为 JSON 对象传递。JWT 由三个由点分隔的部分构成,即头部、负载和签名。负载特性允许我们使用用户 ID 和密钥生成令牌,这使得它更适合用于为特定用户设置 cookie。
目录
- 第 1 步:创建 Node Express 项目
- 第 2 步:数据库和服务器配置
- 第 3 步:设置用户模式
- 第 4 步:中间件设置
- 第 5 步:设置环境变量
- 第 6 步:设置控制器
- 第 7 步:配置 Express 路由器
- 第 8 步:重构服务器
- 第 9 步:测试
先决条件
首先,你必须安装以下软件:
第 1 步:创建 Node Express 项目
通过以下命令创建项目文件夹:
mkdir backend
cd backend
现在,使用以下命令创建 package.json 文件:
npm init -y
NB: 参考 Sequelize 文档 => 文档链接
接下来,安装这些包:
- Express — Node.js 框架
npm install express
- Sequelize — PostgreSQL 的 ORM
npm install --save sequelize
- Pg 和 pg-hstore — pg 是 Node.js 的 PostgreSQL 客户端,pg-hstore 是一个用于将 JSON 数据序列化为 hstore 格式的 node 包 =>
npm install --save pg pg-hstore
- Nodemon — 当文件更改时自动重启 Node 应用程序 =>
npm install nodemon –save-dev
- Bcrypt — 用于密码哈希 =>
npm install bcrypt
- Dotenv => 用于访问你的环境变量 =>
npm install dotenv
- JSON Web Token => 用于生成令牌 =>
npm install jsonwebtoken
- CookieParser => 用于设置 cookie =>
npm install cookie-parser
安装完成后,在 server.js 文件中添加以下内容,并修改你的 package.json 文件,添加一个启动脚本,如下所示:
// package.json
{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"bcrypt": "^5.0.1",
"cookie-parser": "^1.4.6",
"dotenv": "^16.0.1",
"express": "^4.18.1",
"jsonwebtoken": "^8.5.1",
"pg": "^8.7.3",
"pg-hstore": "^2.3.4",
"sequelize": "^6.19.0"
},
"devDependencies": {
"nodemon": "^2.0.16"
}
}
第 2 步:数据库和服务器配置
在 server.js 文件中,导入你的模块,设置你的端口,并监听服务器连接。
// Server.js
// 导入模块
const express = require('express')
const sequelize = require('sequelize')
const dotenv = require('dotenv').config()
const cookieParser = require('cookie-parser')