Files
wushu/ht/api/user.php
2026-03-30 02:35:31 +08:00

239 lines
7.2 KiB
PHP

<?php
/**
* 用户相关API
*/
// 引入必要文件
require_once '../inc/pubs.php';
require_once '../inc/sqls.php';
// 获取操作类型
$action = isset($_REQUEST['act']) ? $_REQUEST['act'] : '';
// 实例化数据库操作类
$db = new DB();
// 根据操作类型执行相应操作
switch ($action) {
// 用户登录
case 'login':
// 获取参数
$username = isset($_POST['username']) ? safeFilter($_POST['username']) : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';
// 参数验证
if (empty($username) || empty($password)) {
ajaxReturn(1, '账号和密码不能为空');
}
// 查询用户
$user = $db->getOne('users', "username = '$username'");
// 验证用户和密码
if (!$user || !password_verify($password, $user['password'])) {
ajaxReturn(1, '用户名或密码错误');
}
// 验证用户状态
if ($user['status'] != 1) {
ajaxReturn(1, '账号已被禁用,请联系管理员');
}
// 更新最后登录时间
$db->update('users', [
'logtime' => date('Y-m-d H:i:s')
], "id = {$user['id']}");
// 记录登录日志
writeLog($user['id'], 'login', '用户登录');
// 存储session
session_start();
$_SESSION['user'] = $user;
ajaxReturn(0, '登录成功', $user);
break;
// 用户注册
case 'register':
// 获取参数
$username = isset($_POST['username']) ? safeFilter($_POST['username']) : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';
$userIdentifier = isset($_POST['user_identifier']) ? safeFilter($_POST['user_identifier']) : '';
// 参数验证
if (empty($username) || empty($password)) {
ajaxReturn(1, '账号和密码不能为空');
}
// 验证账号格式(手机号/邮箱/微信号)
$phoneRegex = '/^1[3456789]\d{9}$/';
$emailRegex = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
$wechatRegex = '/^[a-zA-Z0-9_-]{6,20}$/';
if (!preg_match($phoneRegex, $username) && !preg_match($emailRegex, $username) && !preg_match($wechatRegex, $username)) {
ajaxReturn(1, '请输入正确的手机号、邮箱或微信号');
}
// 验证密码长度
if (strlen($password) < 6) {
ajaxReturn(1, '密码长度不能少于6位');
}
// 检查用户名是否已存在
$existUser = $db->getOne('users', "username = '$username'");
if ($existUser) {
ajaxReturn(1, '该账号已被注册');
}
// 密码加密
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// 添加用户
$userId = $db->insert('users', [
'username' => $username,
'password' => $hashedPassword,
'irole' => 0, // 普通用户
'status' => 1, // 正常状态
'regtime' => date('Y-m-d H:i:s'),
'user_identifier' => $userIdentifier
]);
if (!$userId) {
ajaxReturn(1, '注册失败,请稍后重试');
}
// 记录注册日志
writeLog($userId, 'register', '用户注册');
ajaxReturn(0, '注册成功');
break;
// 用户登出
case 'logout':
session_start();
// 记录登出日志
if (isset($_SESSION['user']) && !empty($_SESSION['user']['id'])) {
writeLog($_SESSION['user']['id'], 'logout', '用户登出');
}
// 清除session
unset($_SESSION['user']);
session_destroy();
// 跳转到首页
header('Location: ../index.php');
exit;
break;
// 获取用户信息
case 'getUserInfo':
// 验证权限
$user = checkAuth('getUserInfo');
if (!$user) {
exit;
}
// 移除敏感信息
unset($user['password']);
ajaxReturn(0, '获取成功', $user);
break;
// 更新用户信息
case 'updateUserInfo':
// 验证权限
$user = checkAuth('updateUserInfo');
if (!$user) {
exit;
}
// 获取参数
$newPassword = isset($_POST['new_password']) ? $_POST['new_password'] : '';
$confirmPassword = isset($_POST['confirm_password']) ? $_POST['confirm_password'] : '';
// 如果要更新密码
if (!empty($newPassword)) {
// 验证密码长度
if (strlen($newPassword) < 6) {
ajaxReturn(1, '密码长度不能少于6位');
}
// 验证两次密码是否一致
if ($newPassword !== $confirmPassword) {
ajaxReturn(1, '两次输入的密码不一致');
}
// 更新密码
$hashedPassword = password_hash($newPassword, PASSWORD_DEFAULT);
// 更新用户信息
$result = $db->update('users', [
'password' => $hashedPassword
], "id = {$user['id']}");
if (!$result) {
ajaxReturn(1, '更新失败,请稍后重试');
}
// 记录日志
writeLog($user['id'], 'update_password', '修改密码');
// 更新 session 中的用户信息
$updatedUser = $db->getOne('users', "id = {$user['id']}");
$_SESSION['user'] = $updatedUser;
ajaxReturn(0, '密码更新成功');
} else {
ajaxReturn(1, '请输入新密码');
}
break;
// 更新用户标识
case 'updateUserIdentifier':
// 验证权限
$user = checkAuth('updateUserIdentifier');
if (!$user) {
exit;
}
// 获取参数
$userIdentifier = isset($_POST['user_identifier']) ? safeFilter($_POST['user_identifier']) : '';
// 验证用户标识长度
if (strlen($userIdentifier) > 100) {
ajaxReturn(1, '用户标识长度不能超过100个字符');
}
// 更新用户标识
$result = $db->update('users', [
'user_identifier' => $userIdentifier
], "id = {$user['id']}");
if (!$result) {
ajaxReturn(1, '更新失败,请稍后重试');
}
// 记录日志
writeLog($user['id'], 'update_identifier', '更新用户标识');
// 获取更新后的用户信息
$updatedUser = $db->getOne('users', "id = {$user['id']}");
// 移除敏感信息
unset($updatedUser['password']);
// 更新 session 中的用户信息
$_SESSION['user'] = $updatedUser;
ajaxReturn(0, '更新成功', $updatedUser);
break;
// 未知操作
default:
ajaxReturn(1, '未知操作');
break;
}