refactor: unified /report command with login/register/track, external auth endpoints
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
const express = require('express');
|
||||
const { query, getRow } = require('../db');
|
||||
const { authenticate } = require('../middleware/auth');
|
||||
const bcrypt = require('bcryptjs');
|
||||
const { v4: uuid } = require('uuid');
|
||||
const { query, getRow, getConfig } = require('../db');
|
||||
const { generateToken } = require('../middleware/auth');
|
||||
const { sendEmail } = require('../mailer');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
@@ -17,6 +20,44 @@ function externalAuth(req, res, next) {
|
||||
return res.status(401).json({ error: '未授权' });
|
||||
}
|
||||
|
||||
router.post('/auth/register', async (req, res) => {
|
||||
try {
|
||||
const { username, password, email, game_name, game_uid } = req.body;
|
||||
if (!username || !password || !email || !game_name || !game_uid) return res.status(400).json({ error: '所有字段必填' });
|
||||
if (password.length < 6) return res.status(400).json({ error: '密码至少6位' });
|
||||
if (await getRow('SELECT id FROM users WHERE username = ?', [username])) return res.status(400).json({ error: '用户名已存在' });
|
||||
if (await getRow('SELECT id FROM users WHERE email = ?', [email])) return res.status(400).json({ error: '邮箱已注册' });
|
||||
|
||||
const hashed = bcrypt.hashSync(password, 10);
|
||||
const verifyToken = uuid();
|
||||
await query('INSERT INTO users(username,password,email,game_name,game_uid,verify_token,verify_expires) VALUES (?,?,?,?,?,?,DATE_ADD(NOW(), INTERVAL 24 HOUR))', [username, hashed, email, game_name, game_uid, verifyToken]);
|
||||
|
||||
const site = await getRow("SELECT v FROM settings WHERE k='site_url'");
|
||||
const sent = await sendEmail(email, 'verify_email', {
|
||||
username, game_name, game_uid,
|
||||
verify_link: `${site?.v||'http://localhost:3100'}#/verify?token=${verifyToken}`,
|
||||
});
|
||||
|
||||
if (!sent) {
|
||||
await query('UPDATE users SET email_verified=1,active=1,verify_token=NULL WHERE username=?', [username]);
|
||||
return res.status(201).json({ message: '注册成功!已自动激活,请登录' });
|
||||
}
|
||||
res.status(201).json({ message: '注册成功,请查收验证邮件' });
|
||||
} catch (e) { res.status(500).json({ error: '服务器错误' }); }
|
||||
});
|
||||
|
||||
router.post('/auth/login', async (req, res) => {
|
||||
try {
|
||||
const { username, password } = req.body;
|
||||
if (!username || !password) return res.status(400).json({ error: '请输入用户名和密码' });
|
||||
const user = await getRow('SELECT * FROM users WHERE username = ?', [username]);
|
||||
if (!user || !bcrypt.compareSync(password, user.password)) return res.status(401).json({ error: '用户名或密码错误' });
|
||||
if (!user.active) return res.status(403).json({ error: '账号未激活' });
|
||||
const token = generateToken(user);
|
||||
res.json({ token, user: { id: user.id, username: user.username, game_name: user.game_name, game_uid: user.game_uid, role: user.role } });
|
||||
} catch (e) { res.status(500).json({ error: '服务器错误' }); }
|
||||
});
|
||||
|
||||
router.use(externalAuth);
|
||||
|
||||
router.post('/tickets', async (req, res) => {
|
||||
|
||||
Reference in New Issue
Block a user