认证授权实现
实现用户登录注册和权限控制
提示词
请实现用户认证授权系统:
需求:
1. 用户注册(邮箱+密码)
2. 用户登录(返回JWT)
3. Token刷新
4. 密码加密存储
5. 权限中间件(登录验证、角色验证)
6. OAuth第三方登录(Google/GitHub)
技术栈:[Node.js+Express/Python+Django等]
安全要求:
- bcrypt加密密码
- JWT短期access + 长期refresh
- 速率限制防暴力破解
- HttpOnly Cookie存储token示例输出
const jwt = require('jsonwebtoken');
const bcrypt = require('bcrypt');
// 注册
app.post('/auth/register', async (req, res) => {
const { email, password } = req.body;
const hashedPassword = await bcrypt.hash(password, 12);
const user = await User.create({ email, password: hashedPassword });
const tokens = generateTokens(user.id);
res.cookie('refreshToken', tokens.refreshToken, { httpOnly: true, secure: true });
res.json({ accessToken: tokens.accessToken });
});
// 登录
app.post('/auth/login', async (req, res) => {
const { email, password } = req.body;
const user = await User.findOne({ email });
if (!user || !await bcrypt.compare(password, user.password)) {
return res.status(401).json({ error: '邮箱或密码错误' });
}
const tokens = generateTokens(user.id);
res.json({ accessToken: tokens.accessToken });
});
// 权限中间件
const requireAuth = (req, res, next) => {
const token = req.headers.authorization?.split(' ')[1];
try {
req.userId = jwt.verify(token, process.env.JWT_SECRET).sub;
next();
} catch {
res.status(401).json({ error: '未登录' });
}
};评论 0
更多
登录后可点赞、收藏、评论和举报。
还没有评论,先发起一个具体问题。