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