下面是一个使用Bcrypt身份验证和JWT授权的示例解决方案:
bcrypt
和jsonwebtoken
库。可以使用以下命令进行安装:npm install bcrypt jsonwebtoken
User
模型,并将其保存在数据库中。这里使用Mongoose
作为MongoDB的ODM。const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
username: String,
password: String,
});
const User = mongoose.model('User', userSchema);
module.exports = User;
const express = require('express');
const bcrypt = require('bcrypt');
const User = require('./models/user');
const app = express();
app.post('/register', async (req, res) => {
const { username, password } = req.body;
// 使用Bcrypt对密码进行哈希处理
const hashedPassword = await bcrypt.hash(password, 10);
// 创建用户
const user = new User({
username,
password: hashedPassword,
});
// 将用户保存到数据库中
await user.save();
res.status(201).json({ message: 'User registered successfully' });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
const express = require('express');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const User = require('./models/user');
const app = express();
app.post('/login', async (req, res) => {
const { username, password } = req.body;
// 查找用户
const user = await User.findOne({ username });
if (!user) {
return res.status(401).json({ message: 'Invalid credentials' });
}
// 验证密码
const isValidPassword = await bcrypt.compare(password, user.password);
if (!isValidPassword) {
return res.status(401).json({ message: 'Invalid credentials' });
}
// 生成JWT令牌
const token = jwt.sign({ userId: user._id }, 'secret-key');
res.json({ token });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
const express = require('express');
const jwt = require('jsonwebtoken');
const User = require('./models/user');
const app = express();
// 验证JWT令牌的中间件
const authenticateToken = (req, res, next) => {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (!token) {
return res.status(401).json({ message: 'Unauthorized' });
}
jwt.verify(token, 'secret-key', async (err, user) => {
if (err) {
return res.status(403).json({ message: 'Forbidden' });
}
// 将用户添加到请求对象中
req.user = await User.findById(user.userId);
next();
});
};
app.get('/protected', authenticateToken, (req, res) => {
res.json({ message: 'Protected route' });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
这是一个基本的示例,展示了如何使用Bcrypt进行身份验证,并使用JWT进行授权。根据您的应用程序需求,您可能需要进行更多的配置和改进。