使用 MySQL 数据库的 Node.js Express 登录示例
在本教程中,我们将构建一个 Node.js 快速登录和注册示例,该示例支持使用 JWT(JSONWebToken)进行基于 Token 的身份验证。您将了解:
- 使用 JWT 身份验证的用户注册和用户登录的适当流程
- Node.js Express 架构与 CORS、身份验证和授权中间件以及 Sequelize
- 如何配置 Express 路由以使用 JWT
- 如何定义身份验证和授权的数据模型和关联
- 使用 Sequelize 与 MySQL 数据库交互的方法
全文:https ://bezkoder.com/node-js-jwt-authentication-mysql/
基于令牌的身份验证
与需要将 Session 存储在 Cookie 上的基于 Session 的身份验证相比,基于 Token 的身份验证的一大优势是我们将 JSON Web Token(JWT)存储在客户端:浏览器的本地存储、IOS 的 Keychain 和 Android 的 SharedPreferences……因此我们不需要构建另一个支持本机应用程序的后端项目或为本机应用程序用户构建额外的身份验证模块。
JWT 有三个重要部分:Header、Payload、Signature。它们组合成一个标准结构:header.payload.signature
。
客户端通常在授权标头中附加带有 Bearer 前缀的 JWT:
Authorization: Bearer [header].[payload].[signature]
或者仅在x-access-token标头中:
x-access-token: [header].[payload].[signature]
更多详细信息可以访问:
JWT-JSON Web Token 深入介绍
Node.js Express 登录和注册示例概述
我们将构建一个 Node.js Express 应用程序:
- 用户可以注册新帐户,或使用用户名和密码登录。
- 根据用户的角色(管理员、版主、用户),我们授权用户访问资源
这是我们使用 MySQL 数据库运行的 Node.js 应用程序演示,并使用 Postman 测试 Rest Apis。
这些是我们需要提供的 API:
- POST
/api/auth/signup
注册新账户 - POST
/api/auth/signin
登录账户 - GET
/api/test/all
检索公开内容 - 获取
/api/test/user
访问用户内容 - 获取
/api/test/mod
访问版主内容 - 获取
/api/test/admin
管理员内容
使用 JWT 身份验证的注册和登录流程
该图显示了用户注册、用户登录和授权过程的流程。
如果客户端访问受保护的资源,则必须在 HTTP x-access-token Header中添加合法的 JWT 。
您可能需要像这样实现刷新令牌:
更多详细信息请访问:https://bezkoder.com/jwt-refresh-token-node-js/
具有身份验证和授权的 Node.js Express 架构
您可以通过下图概览我们的 Node.js Express App:
通过Express路由,与路由匹配的HTTP 请求在进入安全层之前将由CORS 中间件进行检查。
安全层包括:
- JWT 身份验证中间件:验证注册、验证令牌
- 授权中间件:通过数据库中的记录检查用户的角色
如果这些中间件抛出任何错误,则会发送一条消息作为 HTTP 响应。
控制器通过Sequelize与 MySQL 数据库交互并向客户端发送HTTP 响应(令牌、用户信息、基于角色的数据……)。
有关更多详细信息、实现和 Github,请访问:
https://bezkoder.com/node-js-jwt-authentication-mysql/
使用 Cookies:https://www.bezkoder.com/node-js-express-login-example/
与此配合良好的前端:
您可能需要像这样实现刷新令牌:
更多详细信息请访问:https://bezkoder.com/jwt-refresh-token-node-js/
进一步阅读
- 使用 Express、Sequelize 和 MySQL 的 Node.js Rest API 示例
- Node.js + MongoDB:使用 JWT 进行用户身份验证和授权
- Node.js + PostgreSQL:使用 JWT 进行用户身份验证和授权
全栈:
- Vue.js + Node.js + Express + MySQL 示例
- Vue.js + Node.js + Express + MongoDB 示例
- Angular 8 + Node.js Express + MySQL
- Angular 8 + Node.js Express + PostgreSQL
- Angular 8 + Node.js Express + MongoDB
- Node.js Express + Angular 8:用户身份验证和授权示例
- Angular 10 + Node.js Express + MySQL 示例
- Angular 10 + Node.js Express + PostgreSQL 示例
- Angular 10 + Node.js Express + MongoDB
- Node.js Express + Angular 10:JWT 身份验证和授权示例
- Angular 11 + Node.js Express + MySQL
- Angular 11 + Node.js Express + PostgreSQL
- Angular 11 + Node.js Express + MongoDB
- Node.js Express + Angular 11:JWT 身份验证和授权示例
- Angular 12 + Node.js Express + MySQL
- Angular 12 + Node.js Express + PostgreSQL
- Angular 12 + Node.js Express + MongoDB
- Node.js Express + Angular 12:JWT 身份验证和授权示例
- Angular 13 + Node.js Express + MySQL
- Angular 13 + Node.js Express + PostgreSQL
- Angular 13 + Node.js Express + MongoDB
- Node.js Express + Angular 13:JWT 身份验证和授权示例
- Angular 14 + Node.js Express + MySQL
- Angular 14 + Node.js Express + PostgreSQL
- Angular 14 + Node.js Express + MongoDB
- Node.js Express + Angular 14:JWT 身份验证和授权示例
- React + Node.js + Express + MySQL 示例
部署:
Node.js 和 MySQL 关联:
Dockerize:Docker Compose:Node.js Express 和 MySQL 示例
文章来源:https://dev.to/tienbku/node-js-express-login-example-with-mysql-database-2n51