getPdo(); $stmt = $pdo->prepare( "SELECT u.*, r.role_name, r.permissions FROM system_users u LEFT JOIN system_roles r ON r.id = u.role_id WHERE u.username = ? LIMIT 1" ); $stmt->execute([$username]); $user = $stmt->fetch(); if (!$user || !hash_equals($user['password'], sha1($password))) { Response::error('账号或密码错误'); } if ((int)$user['is_active'] !== 1) { Response::error('账号已被禁用,请联系管理员'); } // 更新最后登录时间/IP $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0'; $upd = $pdo->prepare("UPDATE system_users SET last_login_time = NOW(), last_login_ip = ? WHERE id = ?"); $upd->execute([$ip, $user['id']]); // 写入 Session if (session_status() === PHP_SESSION_NONE) { session_start(); } $_SESSION['user_id'] = (int)$user['id']; $_SESSION['username'] = $user['username']; $_SESSION['real_name'] = $user['real_name'] ?? $user['username']; $_SESSION['role_id'] = (int)$user['role_id']; $_SESSION['role_name'] = $user['role_name'] ?? ''; $_SESSION['permissions'] = json_decode($user['permissions'] ?? '[]', true) ?: []; // 操作日志 logAction((int)$user['id'], $user['username'], 'login', 'auth', 'system_users', (int)$user['id'], ['ip' => $ip]); Response::success([ 'real_name' => $_SESSION['real_name'], 'role_name' => $_SESSION['role_name'], 'permissions' => $_SESSION['permissions'], ], '登录成功');