档案管理系统身份认证功能从零开发落地实操全流程指南

前置准备

提前安装好以下环境,所有资源均直接提供可下载地址,无模糊引导:

  • Node.js 18+:Windows直接下载安装包 https://nodejs.org/dist/v18.17.0/node-v18.17.0-x64.msi,Mac用户执行终端命令brew install node@18,安装完成后打开终端输入node -v输出版本号即为成功
  • MongoDB 5+:Windows直接下载安装包 https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.10.msi,默认安装完成后自动启动,端口为27017即可
  • 代码编辑器:VS Code,下载地址 https://code.visualstudio.com/download

第一步:初始化项目与安装依赖

新建空白文件夹命名为archive-auth,打开终端进入该文件夹,依次执行以下命令:

``` 初始化项目配置 npm init -y 安装所有核心依赖 npm install express jsonwebtoken bcryptjs cors mongoose ```

执行完成后,在项目根目录依次创建以下文件/文件夹:config.jsapp.jsmodels/User.jsmiddleware/auth.js

第二步:编写核心配置与认证中间件

1. 基础配置文件config.js

直接复制以下完整配置,生产环境替换对应参数即可:

``` module.exports = { // JWT签名密钥,生产环境必须更换为32位随机字符串 jwtSecret: 'archive_system_custom_auth_key_2024', // 登录令牌过期时间,可自行调整 jwtExpire: '7d', // MongoDB数据库连接地址 dbUrl: 'mongodb://localhost:27017/archive_manage_system' } ``` 注意:密钥不可泄露,生产环境必须更换示例值

2. 用户数据模型models/User.js

该文件负责用户数据结构定义和密码加密,直接复制完整代码:

``` const mongoose = require('mongoose'); const bcrypt = require('bcryptjs'); const userSchema = new mongoose.Schema({ username: { type: String, required: true, unique: true }, password: { type: String, required: true }, role: { type: String, enum: ['admin', 'viewer'], default: 'viewer' } }); // 保存用户前自动加密密码,无需手动处理 userSchema.pre('save', async function(next) { if (!this.isModified('password')) return next(); this.password = await bcrypt.hash(this.password, 10); next(); }); // 明文密码和加密密码校验方法 userSchema.methods.comparePassword = async function(plainPassword) { return bcrypt.compare(plainPassword, this.password); } module.exports = mongoose.model('User', userSchema); ```

3. 认证拦截中间件middleware/auth.js

档案管理系统身份认证功能从零开发落地实操全流程指南

这是认证功能的核心,所有需要权限的接口都要经过该中间件校验,完整代码:

``` const jwt = require('jsonwebtoken'); const { jwtSecret } = require('../config'); module.exports = (req, res, next) => { // 从请求头提取令牌 const token = req.headers.authorization?.split(' ')[1]; if (!token) { return res.status(401).json({ code: 401, msg: '未登录,无访问权限' }); } try { // 验证令牌合法性 const decoded = jwt.verify(token, jwtSecret); req.user = decoded; next(); } catch (err) { return res.status(401).json({ code: 401, msg: '令牌失效,请重新登录' }); } } ```

第三步:编写登录与认证接口

打开入口文件app.js,直接复制以下完整可运行代码:

``` const express = require('express'); const mongoose = require('mongoose'); const cors = require('cors'); const jwt = require('jsonwebtoken'); const { jwtSecret, jwtExpire, dbUrl } = require('./config'); const User = require('./models/User'); const authMiddleware = require('./middleware/auth'); const app = express(); // 基础中间件配置 app.use(cors()); app.use(express.json()); // 连接数据库 mongoose.connect(dbUrl) .then(() => console.log('数据库连接成功')) .catch(err => console.log('数据库连接失败', err)); // 自动初始化管理员账号,无需手动创建 const initAdmin = async () => { const existAdmin = await User.findOne({ username: 'admin' }); if (!existAdmin) { await User.create({ username: 'admin', password: 'admin123456', role: 'admin' }); console.log('初始管理员账号已生成:用户名admin,密码admin123456'); } }; mongoose.connection.on('connected', initAdmin); // 登录接口 app.post('/api/login', async (req, res) => { const { username, password } = req.body; // 参数校验 if (!username || !password) { return res.status(400).json({ code: 400, msg: '用户名和密码不能为空' }); } // 校验用户 const user = await User.findOne({ username }); if (!user) { return res.status(400).json({ code: 400, msg: '用户名或密码错误' }); } // 校验密码 const isValidPwd = await user.comparePassword(password); if (!isValidPwd) { return res.status(400).json({ code: 400, msg: '用户名或密码错误' }); } // 生成登录令牌 const token = jwt.sign( { id: user._id, username: user.username, role: user.role }, jwtSecret, { expiresIn: jwtExpire } ); res.json({ code: 200, msg: '登录成功', data: { token, role: user.role } }); }); // 测试认证接口,验证功能是否正常 app.get('/api/auth/test', authMiddleware, (req, res) => { res.json({ code: 200, msg: '认证通过', data: req.user }); }); // 启动服务 const PORT = 3000; app.listen(PORT, () => { console.log(`服务已启动,本地访问地址:http://localhost:${PORT}`); }); ```

第四步:启动验证功能

在项目根目录终端输入命令node app.js,按照以下步骤验证:

  1. 看到终端输出「数据库连接成功」「初始管理员账号已生成」「服务已启动」即为启动成功
  2. 调用登录接口:请求方式POST,地址http://localhost:3000/api/login,请求体JSON为{"username":"admin","password":"admin123456"},返回token即为登录成功
  3. 调用认证测试接口:请求方式GET,地址http://localhost:3000/api/auth/test,请求头添加Authorization: Bearer 你刚才获取到的token,返回用户信息即为认证功能生效

接入业务系统的注意事项

所有访问档案数据的接口,都需要添加认证中间件拦截,示例如下:

``` // 示例:需要认证的档案列表接口 app.get('/api/archive/list', authMiddleware, (req, res) => { // 在这里写你的档案查询业务逻辑即可,req.user中存储当前登录用户信息 res.json({ code: 200, data: [] }); }); ```

如果需要权限控制,只允许管理员访问某个接口,添加一行判断即可:

``` if (req.user.role !== 'admin') { return res.status(403).json({ code: 403, msg: '无权限访问该资源' }); } ```

生产环境部署必须修改两个配置:1. 将config.js中的jwtSecret替换为32位以上随机字符串;2. 将dbUrl替换为带密码的正式数据库地址,格式为mongodb://数据库用户名:数据库密码@服务器IP:27017/库名。修改完成后即可直接部署使用,整个流程零门槛,所有代码可直接复制运行。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统