# 登录问题排查指南 ## 🔴 问题:登录时显示"用户名或密码错误" ## 📋 排查步骤 ### 步骤1:检查数据库连接 确保MySQL服务已启动,并且可以连接到数据库。 ### 步骤2:检查管理员账号是否存在 #### 方法1:使用SQL查询 ```sql -- 连接到MySQL mysql -u root -p books_db -- 检查admin用户 SELECT id, username, nickname, password, role, status FROM users WHERE username = 'admin'; ``` #### 方法2:执行检查脚本 ```bash # 在book项目根目录执行 mysql -u root -p books_db < src/main/resources/db/check_admin_user.sql ``` ### 步骤3:检查管理员账号信息 管理员账号应该满足以下条件: 1. ✅ `username` = 'admin' 2. ✅ `password` = '0192023a7bbd73250516f069df18b500'(admin123的MD5值) 3. ✅ `role` = 'admin' 4. ✅ `status` = 1(激活状态) ### 步骤4:修复管理员账号 如果管理员账号不存在或信息不正确,执行修复脚本: ```bash # 在book项目根目录执行 mysql -u root -p books_db < src/main/resources/db/fix_admin_user.sql ``` ### 步骤5:手动创建/修复管理员账号 如果脚本执行失败,可以手动执行SQL: ```sql -- 1. 确保role字段存在 ALTER TABLE `users` ADD COLUMN `role` VARCHAR(20) DEFAULT 'user' COMMENT '用户角色:admin-管理员,user-普通用户' AFTER `status`; -- 2. 删除已存在的admin用户(如果存在) DELETE FROM `users` WHERE `username` = 'admin'; -- 3. 创建新的管理员账号 INSERT INTO `users` (`username`, `nickname`, `password`, `role`, `status`, `created_at`, `updated_at`) VALUES ('admin', '管理员', '0192023a7bbd73250516f069df18b500', 'admin', 1, NOW(), NOW()); -- 4. 验证管理员账号 SELECT id, username, nickname, password, role, status FROM `users` WHERE `username` = 'admin'; ``` ## 🔍 常见问题 ### 问题1:管理员账号不存在 **现象:** 查询结果为空 **解决:** 执行修复脚本或手动创建管理员账号 ### 问题2:密码不正确 **现象:** 密码字段不是 `0192023a7bbd73250516f069df18b500` **解决:** ```sql UPDATE `users` SET `password` = '0192023a7bbd73250516f069df18b500' WHERE `username` = 'admin'; ``` ### 问题3:角色不是admin **现象:** role字段不是 'admin' **解决:** ```sql UPDATE `users` SET `role` = 'admin' WHERE `username` = 'admin'; ``` ### 问题4:用户状态未激活 **现象:** status字段不是 1 **解决:** ```sql UPDATE `users` SET `status` = 1 WHERE `username` = 'admin'; ``` ### 问题5:role字段不存在 **现象:** 执行查询时提示role字段不存在 **解决:** ```sql ALTER TABLE `users` ADD COLUMN `role` VARCHAR(20) DEFAULT 'user' COMMENT '用户角色:admin-管理员,user-普通用户' AFTER `status`; ``` ## ✅ 验证修复 ### 1. 检查管理员账号 ```sql SELECT id, username, password, CASE WHEN password = '0192023a7bbd73250516f069df18b500' THEN '密码正确' ELSE '密码不正确' END AS password_status, role, CASE WHEN role = 'admin' THEN '角色正确' ELSE '角色不正确' END AS role_status, status, CASE WHEN status = 1 THEN '已激活' ELSE '未激活' END AS status_text FROM users WHERE username = 'admin'; ``` ### 2. 测试登录 1. 确保后端服务已启动 2. 访问登录页面:`http://localhost:8000/pages/login.html` 3. 输入用户名:`admin` 4. 输入密码:`admin123` 5. 点击登录 ## 🆘 如果仍然无法登录 ### 1. 检查后端服务日志 查看后端服务启动日志,检查是否有错误信息。 ### 2. 检查数据库连接 确保 `application.properties` 中的数据库配置正确: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/books_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true spring.datasource.username=root spring.datasource.password=root ``` ### 3. 检查PasswordUtil类 确保 `PasswordUtil.verify` 方法正常工作。可以测试: ```java String encrypted = PasswordUtil.encrypt("admin123"); System.out.println(encrypted); // 应该输出:0192023a7bbd73250516f069df18b500 boolean verified = PasswordUtil.verify("admin123", "0192023a7bbd73250516f069df18b500"); System.out.println(verified); // 应该输出:true ``` ### 4. 检查后端API 使用curl或Postman测试登录接口: ```bash curl -X POST http://localhost:8081/api/admin/login \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"admin123"}' ``` ## 📝 默认管理员账号信息 - **用户名:** admin - **密码:** admin123 - **密码MD5:** 0192023a7bbd73250516f069df18b500 - **角色:** admin - **状态:** 1(激活) ## 🔧 快速修复命令 ```bash # 1. 连接到MySQL mysql -u root -p books_db # 2. 执行修复SQL(在MySQL中执行) source book/src/main/resources/db/fix_admin_user.sql # 或者直接执行: mysql -u root -p books_db < book/src/main/resources/db/fix_admin_user.sql ```