diff --git a/README.md b/README.md
index 2c64124..b953609 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,8 @@
✅ **后台管理系统**
- 用户登录验证(默认用户名/密码:admin/admin)
+- 密码加密存储(使用 PHP password_hash)
+- 在线修改密码功能
- 上传 APK 文件到服务器
- 版本管理(查看、删除)
- 网站配置(标题、说明、Logo)
@@ -20,6 +22,7 @@
- 使用 SQLite 文件数据库
- APK 文件存储在 `data/apps/` 目录
- Logo 文件存储在 `data/uploads/` 目录
+- 用户密码加密存储
## 目录结构
@@ -89,6 +92,15 @@ php_app_downloader/
4. 上传新的 Logo(支持 JPG/PNG/GIF)
5. 点击"保存配置"
+#### 修改密码
+1. 点击顶部导航的"修改密码"
+2. 输入当前密码
+3. 输入新密码(至少4位)
+4. 确认新密码
+5. 点击"修改密码"
+
+**重要提示:** 首次登录后请立即修改默认密码以提高安全性!
+
### 4. 前端使用
- 访问网站首页查看所有版本
@@ -123,6 +135,16 @@ php_app_downloader/
- `site_description` - 软件说明
- `logo_path` - Logo 路径
+### users 表
+存储用户账号信息
+
+| 字段 | 类型 | 说明 |
+|------|------|------|
+| id | INTEGER | 主键,自增 |
+| username | TEXT | 用户名(唯一)|
+| password | TEXT | 加密后的密码 |
+| created_at | DATETIME | 创建时间 |
+
## API 接口
### 下载接口
@@ -168,6 +190,13 @@ php_app_downloader/
## 更新日志
+### v2.1 (2024-06-24)
+- ✅ 新增用户密码管理功能
+- ✅ 密码使用 password_hash 加密存储
+- ✅ 支持在线修改密码
+- ✅ 添加 users 数据表
+- ✅ 数据库自动升级机制
+
### v2.0 (2024-06-24)
- ✅ 新增管理后台系统
- ✅ 新增用户登录功能
@@ -176,6 +205,7 @@ php_app_downloader/
- ✅ 支持网站配置管理
- ✅ 重写前端样式
- ✅ 使用 SQLite 数据库
+- ✅ PHP 自动创建所需目录
### v1.0
- 基础下载功能
diff --git a/admin/change_password.php b/admin/change_password.php
new file mode 100644
index 0000000..eb0502e
--- /dev/null
+++ b/admin/change_password.php
@@ -0,0 +1,105 @@
+prepare("SELECT * FROM users WHERE id = ?");
+ $stmt->execute([$_SESSION['user_id']]);
+ $user = $stmt->fetch(PDO::FETCH_ASSOC);
+
+ if ($user && password_verify($old_password, $user['password'])) {
+ // 更新密码
+ $new_password_hash = password_hash($new_password, PASSWORD_DEFAULT);
+ $stmt = $db->prepare("UPDATE users SET password = ? WHERE id = ?");
+
+ if ($stmt->execute([$new_password_hash, $_SESSION['user_id']])) {
+ $success = '密码修改成功!';
+ } else {
+ $error = '密码修改失败,请重试';
+ }
+ } else {
+ $error = '旧密码错误';
+ }
+ }
+}
+?>
+
+
+
+
+
+ 修改密码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 安全提示
+
+ - 密码长度建议至少8位,包含字母、数字和特殊字符
+ - 不要使用过于简单的密码,如:123456、admin 等
+ - 定期更换密码以提高安全性
+ - 不要将密码告诉他人
+
+
+
+
+
+
diff --git a/admin/config.php b/admin/config.php
index d01b1be..f49a1c3 100644
--- a/admin/config.php
+++ b/admin/config.php
@@ -67,6 +67,7 @@ $logo_path = getConfig('logo_path', 'logo.png');
网站配置
diff --git a/admin/dashboard.php b/admin/dashboard.php
index 7a64f46..1cd3115 100644
--- a/admin/dashboard.php
+++ b/admin/dashboard.php
@@ -22,6 +22,7 @@ $apps = $stmt->fetchAll(PDO::FETCH_ASSOC);
diff --git a/admin/index.php b/admin/index.php
index f248ad6..668a501 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -1,5 +1,6 @@
prepare("SELECT * FROM users WHERE username = ?");
+ $stmt->execute([$username]);
+ $user = $stmt->fetch(PDO::FETCH_ASSOC);
+
+ if ($user && password_verify($password, $user['password'])) {
$_SESSION['admin_logged_in'] = true;
$_SESSION['username'] = $username;
+ $_SESSION['user_id'] = $user['id'];
header('Location: dashboard.php');
exit;
} else {
diff --git a/includes/db.php b/includes/db.php
index b484268..2daed26 100644
--- a/includes/db.php
+++ b/includes/db.php
@@ -66,6 +66,16 @@ try {
)
");
+ // 创建 users 表
+ $db->exec("
+ CREATE TABLE IF NOT EXISTS users (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ username TEXT UNIQUE NOT NULL,
+ password TEXT NOT NULL,
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ )
+ ");
+
// 插入默认配置
$defaults = [
['site_title', 'OPS 运营管理系统'],
@@ -78,10 +88,31 @@ try {
$stmt->execute($config);
}
+ // 插入默认管理员账号(密码使用 password_hash 加密)
+ $stmt = $db->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
+ $stmt->execute(['admin', password_hash('admin', PASSWORD_DEFAULT)]);
+
// 设置新创建的数据库文件权限
@chmod($db_path, 0666);
}
+ // 数据库升级:如果 users 表不存在,创建它并迁移默认用户
+ $tables = $db->query("SELECT name FROM sqlite_master WHERE type='table' AND name='users'")->fetchAll();
+ if (empty($tables)) {
+ $db->exec("
+ CREATE TABLE IF NOT EXISTS users (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ username TEXT UNIQUE NOT NULL,
+ password TEXT NOT NULL,
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
+ )
+ ");
+
+ // 插入默认管理员账号
+ $stmt = $db->prepare("INSERT OR IGNORE INTO users (username, password) VALUES (?, ?)");
+ $stmt->execute(['admin', password_hash('admin', PASSWORD_DEFAULT)]);
+ }
+
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage() . "
请确保:
1. data 目录存在且可写 (chmod 777 data)
2. Web 服务器用户有权限创建文件");
}