router.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import express from 'express';
  2. const Parse = require('parse');
  3. const router = express.Router();
  4. // 修改密码接口
  5. router.post('/change-password', async (req: any, res) => {
  6. try {
  7. // 1. 基础参数校验:旧密码、新密码非空
  8. const { oldPassword, newPassword } = req.body;
  9. if (!oldPassword || !newPassword) {
  10. return res.status(400).json({
  11. success: false,
  12. message: '参数错误:旧密码和新密码不能为空'
  13. });
  14. }
  15. // 2. 获取当前认证用户(Parse自动挂载,未认证则req.user为undefined)
  16. const currentUser = req.user;
  17. if (!currentUser) {
  18. return res.status(401).json({
  19. success: false,
  20. message: '未授权:请先登录'
  21. });
  22. }
  23. // 3. 验证旧密码:通过用户名+旧密码重新登录,验证身份
  24. // currentUser.get('username') 若用户用邮箱注册,可替换为 currentUser.get('email')
  25. await Parse.User.logIn(currentUser.get('username'), oldPassword);
  26. // 4. 核心操作:设置新密码(Parse官方方法)
  27. currentUser.setPassword(newPassword);
  28. // 5. 保存用户信息(完成密码持久化,useMasterKey: false 遵循普通用户权限)
  29. await currentUser.save(null, { useMasterKey: false });
  30. // 6. 返回成功响应
  31. res.status(200).json({
  32. success: true,
  33. message: '密码修改成功,请重新登录'
  34. });
  35. } catch (error: any) {
  36. // 统一异常处理:根据错误类型返回对应信息
  37. console.error('修改密码失败:', error); // 服务端打印错误,方便调试
  38. if (error.code === 101) {
  39. // Parse错误码101:用户名/密码错误(旧密码验证失败)
  40. return res.status(401).json({
  41. success: false,
  42. message: '旧密码错误,请重新输入'
  43. });
  44. }
  45. // 其他错误(如数据库错误、参数不合法等)
  46. res.status(500).json({
  47. success: false,
  48. message: '服务器内部错误,修改密码失败',
  49. error: process.env.NODE_ENV === 'development' ? error.message : '' // 开发环境返回错误详情
  50. });
  51. }
  52. });
  53. export default router;