认证授权实现

实现用户登录注册和权限控制

提示词

请实现用户认证授权系统:

需求:
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

评论 0

更多

登录后可点赞、收藏、评论和举报。

还没有评论,先发起一个具体问题。