import express from 'express'; const router = express.Router(); // POST /api/auth/login — 支持 email/phone/name 登录 router.post('/login', async (req, res) => { try { const Parse = (globalThis as any).Parse; const { identifier, password } = req.body; if (!identifier || !password) { return res.status(400).json({ success: false, error: '缺少 identifier 或 password' }); } // 1. 先尝试直接用 identifier 作为 username 登录 try { const user = await Parse.User.logIn(identifier, password); return res.json({ success: true, data: { objectId: user.id, username: user.get('username'), email: user.get('email'), name: user.get('name'), role: user.get('role'), department: user.get('department'), phone: user.get('phone'), sessionToken: user.getSessionToken(), }, }); } catch { /* 继续尝试其他方式 */ } // 2. 通过 email 查找 const q1 = new Parse.Query(Parse.User); q1.equalTo('email', identifier); let user = await q1.first({ useMasterKey: true }); // 3. 通过 phone 查找 if (!user) { const q2 = new Parse.Query(Parse.User); q2.equalTo('phone', identifier); user = await q2.first({ useMasterKey: true }); } // 4. 通过 name 查找 if (!user) { const q3 = new Parse.Query(Parse.User); q3.equalTo('name', identifier); user = await q3.first({ useMasterKey: true }); } if (!user) { return res.status(401).json({ success: false, error: '账户不存在' }); } // 用找到的 username 尝试登录 try { const loggedIn = await Parse.User.logIn(user.get('username'), password); return res.json({ success: true, data: { objectId: loggedIn.id, username: loggedIn.get('username'), email: loggedIn.get('email'), name: loggedIn.get('name'), role: loggedIn.get('role'), department: loggedIn.get('department'), phone: loggedIn.get('phone'), sessionToken: loggedIn.getSessionToken(), }, }); } catch { return res.status(401).json({ success: false, error: '密码错误或账户已停用' }); } } catch (e: any) { res.status(500).json({ success: false, error: e.message }); } }); // GET /api/auth/me — 获取当前用户 router.get('/me', async (req, res) => { try { const token = req.headers.authorization?.replace('Bearer ', '') || ''; if (!token) { return res.status(401).json({ success: false, error: '未登录' }); } const Parse = (globalThis as any).Parse; const q = new Parse.Query('_Session'); q.equalTo('sessionToken', token); const session = await q.first({ useMasterKey: true }); if (!session) { return res.status(401).json({ success: false, error: 'token 已失效' }); } const user = session.get('user'); if (user) { await user.fetch({ useMasterKey: true }); res.json({ success: true, data: { objectId: user.id, username: user.get('username'), email: user.get('email'), name: user.get('name'), role: user.get('role'), department: user.get('department'), phone: user.get('phone'), }, }); } else { res.status(401).json({ success: false, error: '用户不存在' }); } } catch (e: any) { res.status(500).json({ success: false, error: e.message }); } }); export default router;