若依管理系统,登陆后授权使用webstock,不登陆不能访问。代码案例
5条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
在实现一个类似若依管理系统的Web应用时,我们可以使用Node.js作为后端开发语言,Express框架构建API,MongoDB存储用户数据,并利用JWT(JSON Web Tokens)进行权限验证。这里是一个简单的示例,展示如何实现登录、生成JWT以及保护WebStock资源的路由。
首先,确保已经安装了所需的依赖项:
npm install express mongoose jsonwebtoken bcryptjs cors然后,创建一个名为
app.js的文件,开始编写代码:const express = require('express'); const mongoose = require('mongoose'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const cors = require('cors'); // 连接数据库 mongoose.connect('mongodb://localhost/your_database_name', { useNewUrlParser: true, useUnifiedTopology: true, }); // 定义User模型 const UserSchema = new mongoose.Schema({ username: { type: String, required: true, unique: true }, password: { type: String, required: true }, }); const User = mongoose.model('User', UserSchema); // 创建 Express 应用 const app = express(); app.use(cors()); app.use(express.json()); // 用户注册 app.post('/register', async (req, res) => { const user = new User(req.body); user.password = await bcrypt.hash(user.password, 10); try { await user.save(); res.status(201).json({ message: 'User registered successfully' }); } catch (error) { res.status(400).json({ error: error.message }); } }); // 用户登录 app.post('/login', async (req, res) => { const { username, password } = req.body; const user = await User.findOne({ username }); if (!user || !(await bcrypt.compare(password, user.password))) { return res.status(401).json({ error: 'Invalid credentials' }); } const token = jwt.sign({ userId: user._id }, 'your_secret_key', { expiresIn: '1h', }); res.json({ token }); }); // 保护的WebStock资源 app.get('/webstock', authMiddleware, async (req, res) => { // 在这里处理WebStock资源的逻辑 res.json({ message: 'Welcome to WebStock!' }); }); // 权限中间件 function authMiddleware(req, res, next) { const token = req.headers.authorization?.split(' ')[1]; if (!token) { return res.status(401).json({ error: 'Access denied. No token provided.' }); } try { const decoded = jwt.verify(token, 'your_secret_key'); req.userId = decoded.userId; next(); } catch (error) { console.error(error); res.status(403).json({ error: 'Invalid token.' }); } } // 启动服务器 const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); });这个示例中,我们创建了一个用户模型并定义了注册和登录功能。当用户登录成功后,我们将生成一个JWT并返回给客户端。客户端需要将此令牌保存在本地存储或cookie中,并在后续请求中通过
Authorization头传递该令牌。对于受保护的资源(例如/webstock),我们使用authMiddleware中间件检查令牌的有效性。注意:这个例子没有包含前端部分,你需要在前端实现表单提交、存储和发送JWT的功能。同时,为了安全起见,请替换
'your_secret_key'为实际的安全密钥。此外,这个示例没有处理错误处理和日志记录,根据实际情况进行添加。在生产环境中,建议使用环境变量来存储敏感信息,比如数据库连接字符串和JWT密钥。
解决 无用评论 打赏 举报 编辑记录