| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 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;
|