getOne('users', "username = '$username'"); // 验证用户和密码 if (!$user || !password_verify($password, $user['password'])) { apiResponse(1, '账号或密码错误'); } // 验证用户状态 if ($user['status'] != 1) { apiResponse(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; // 移除敏感信息 unset($user['password']); apiResponse(0, '登录成功', $user); } /** * 处理用户注册 * @param array $params 请求参数 * @param DB $db 数据库操作对象 */ function handleRegister($params, $db) { // 获取参数 $username = isset($params['username']) ? safeFilter($params['username']) : ''; $password = isset($params['password']) ? $params['password'] : ''; $userIdentifier = isset($params['user_identifier']) ? safeFilter($params['user_identifier']) : ''; // 参数验证 if (empty($username) || empty($password)) { apiResponse(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)) { apiResponse(1, '请输入正确的手机号、邮箱或微信号'); } // 验证密码长度 if (strlen($password) < 6) { apiResponse(1, '密码长度不能少于6位'); } // 检查用户名是否已存在 $existUser = $db->getOne('users', "username = '$username'"); if ($existUser) { apiResponse(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) { apiResponse(1, '注册失败,请稍后重试'); } // 记录注册日志 writeLog($userId, 'register', '用户注册'); apiResponse(0, '注册成功'); } /** * 处理获取用户信息 * @param array $params 请求参数 * @param DB $db 数据库操作对象 */ function handleGetUserInfo($params, $db) { // 检查登录状态 $user = checkLogin(); if (!$user) { apiResponse(1, '请先登录'); } // 获取最新的用户信息 $userInfo = $db->getOne('users', "id = {$user['id']}"); if (!$userInfo) { apiResponse(1, '用户不存在'); } // 移除敏感信息 unset($userInfo['password']); apiResponse(0, '获取成功', $userInfo); } /** * 处理更新用户标识 * @param array $params 请求参数 * @param DB $db 数据库操作对象 */ function handleUpdateUserIdentifier($params, $db) { // 检查登录状态 $user = checkLogin(); if (!$user) { apiResponse(1, '请先登录'); } // 获取参数 $userIdentifier = isset($params['user_identifier']) ? safeFilter($params['user_identifier']) : ''; // 验证用户标识长度 if (strlen($userIdentifier) > 100) { apiResponse(1, '用户标识长度不能超过100个字符'); } // 更新用户标识 $result = $db->update('users', [ 'user_identifier' => $userIdentifier ], "id = {$user['id']}"); if (!$result) { apiResponse(1, '更新失败,请稍后重试'); } // 记录日志 writeLog($user['id'], 'update_identifier', '更新用户标识'); // 获取更新后的用户信息 $updatedUser = $db->getOne('users', "id = {$user['id']}"); // 移除敏感信息 unset($updatedUser['password']); // 更新session session_start(); $_SESSION['user'] = $updatedUser; apiResponse(0, '更新成功', $updatedUser); } /** * 处理用户登出 */ function handleLogout() { session_start(); // 记录登出日志 if (isset($_SESSION['user']) && !empty($_SESSION['user']['id'])) { writeLog($_SESSION['user']['id'], 'logout', '用户登出'); } // 清除session unset($_SESSION['user']); session_destroy(); apiResponse(0, '登出成功'); } /** * 统一API响应格式 * @param int $code 状态码,0表示成功,非0表示失败 * @param string $msg 提示信息 * @param array $data 返回数据 */ function apiResponse($code = 0, $msg = '', $data = []) { echo json_encode([ 'code' => $code, 'msg' => $msg, 'data' => $data ], JSON_UNESCAPED_UNICODE); exit; }