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