express,生成用户登录后的 token

在 Node.js 中使用 Express 框架生成用户登录后的 token,通常会涉及到以下几个步骤:

  1. 设置 Express 应用:首先,你需要有一个基本的 Express 应用。
  2. 安装必要的中间件 :例如 jsonwebtoken(JWT)用于生成和验证 token,body-parser 用于解析请求体(虽然 Express 4.16.0 及以上版本已经内置了 express.json()express.urlencoded())。
  3. 定义用户认证逻辑:在用户登录时,验证用户凭据并生成 token。
  4. 发送 token 给客户端:通常通过 HTTP 响应头或响应体发送 token。

以下是一个简单的示例,展示了如何实现这些步骤:

1. 设置 Express 应用

首先,创建一个新的 Node.js 项目并安装 Express 和 JWT:

bash 复制代码
mkdir express-token-example
cd express-token-example
npm init -y
npm install express jsonwebtoken body-parser

2. 创建 Express 应用并配置中间件

创建一个 app.js 文件,并添加以下代码:

javascript 复制代码
const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');

const app = express();
const PORT = 3000;

// 使用内置的中间件解析 JSON 请求体
app.use(express.json());

// 密钥(在实际应用中,请确保密钥的安全存储)
const SECRET_KEY = 'your_secret_key';

// 模拟用户数据
const users = [
  { id: 1, username: 'user1', password: 'password1' },
  { id: 2, username: 'user2', password: 'password2' }
];

// 用户登录路由
app.post('/login', (req, res) => {
  const { username, password } = req.body;

  // 查找用户
  const user = users.find(u => u.username === username && u.password === password);

  if (!user) {
    return res.status(401).json({ message: 'Invalid credentials' });
  }

  // 生成 token
  const token = jwt.sign({ id: user.id, username: user.username }, SECRET_KEY, { expiresIn: '1h' });

  // 发送 token 给客户端
  res.json({ token });
});

// 受保护的路由示例
const authenticateJWT = (req, res, next) => {
  const token = req.header('Authorization') && req.header('Authorization').split(' ')[1];

  if (token == null) {
    return res.sendStatus(401);
  }

  jwt.verify(token, SECRET_KEY, (err, user) => {
    if (err) {
      return res.sendStatus(403);
    }
    req.user = user;
    next();
  });
};

app.get('/protected', authenticateJWT, (req, res) => {
  res.json({ message: 'This is a protected route', user: req.user });
});

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

3. 运行应用

在终端中运行以下命令启动服务器:

bash 复制代码
node app.js

4. 测试登录和受保护的路由

你可以使用 Postman 或 curl 来测试登录和受保护的路由。

登录请求

bash 复制代码
curl -X POST http://localhost:3000/login -H "Content-Type: application/json" -d '{"username": "user1", "password": "password1"}'

你应该会收到一个 JSON 响应,其中包含生成的 token:

json 复制代码
{
  "token": "your_jwt_token_here"
}

访问受保护的路由

将生成的 token 添加到请求头中:

bash 复制代码
curl -X GET http://localhost:3000/protected -H "Authorization: Bearer your_jwt_token_here"

你应该会收到一个 JSON 响应,确认你已经成功访问了受保护的路由:

json 复制代码
{
  "message": "This is a protected route",
  "user": {
    "id": 1,
    "username": "user1"
  }
}

这样,你就完成了一个基本的用户登录和 token 生成系统。在实际应用中,请确保使用更安全的密码存储方式(如 bcrypt)和更复杂的用户认证逻辑。

相关推荐
liangshanbo12151 天前
Express SSE 流式输出实战:从入门 Demo 到 AI 生产级架构
人工智能·架构·express
GISHUB2 天前
Express + TypeScript + ESM 后端框架示例(@yao-pkg/pkg 打包)
typescript·express
万亿少女的梦1685 天前
基于微信小程序、Express与MongoDB的校园失物招领系统设计
mongodb·微信小程序·node.js·express·系统设计
米码收割机8 天前
SA508-3钢回火焊道焊接温度场数值模拟(模拟图+论文)
spring boot·express·宠物
Pu_Nine_99 天前
Vue3+TS+Express 转 Nuxt4 全栈开发笔记(Drizzle ORM + MySQL)
前端·vue·express·nuxt.js·全栈框架
张人玉13 天前
基于 Vue 3 + ECharts + Express + SQLite 构—— LDA 模型的新闻舆论主题识别与情感分析系统
vue.js·echarts·express
张人玉15 天前
基于 Vue 3 + ECharts + Express + SQLite 的可视化大屏与业务管理系统——YOLOv8 高精度车辆行人检测与计数系统
数据库·vue.js·yolo·sqlite·echarts·express
张人玉16 天前
基于 Vue 3 + ECharts + Express + SQLite 构建的鞋类零售数据分析与毛利预测平台——基于深度学习的鞋类销售数据分析系统
vue.js·sqlite·echarts·express
张人玉20 天前
基于 Vue 3 + ECharts + Express + SQLite 的世界数据可视化大屏系统——世界态势数据可视化大屏
vue.js·echarts·express
张人玉21 天前
基于 Vue3 + ECharts + Express + SQLite 的智慧交通数据可视化系统——郑州交通数据可视化大屏
sqlite·echarts·express