登录问题排查指南.md 5.0 KB

登录问题排查指南

🔴 问题:登录时显示"用户名或密码错误"

📋 排查步骤

步骤1:检查数据库连接

确保MySQL服务已启动,并且可以连接到数据库。

步骤2:检查管理员账号是否存在

方法1:使用SQL查询

-- 连接到MySQL
mysql -u root -p books_db

-- 检查admin用户
SELECT id, username, nickname, password, role, status 
FROM users 
WHERE username = 'admin';

方法2:执行检查脚本

# 在book项目根目录执行
mysql -u root -p books_db < src/main/resources/db/check_admin_user.sql

步骤3:检查管理员账号信息

管理员账号应该满足以下条件:

  1. username = 'admin'
  2. password = '0192023a7b'(admin123的MD5值)
  3. role = 'admin'
  4. status = 1(激活状态)

步骤4:修复管理员账号

如果管理员账号不存在或信息不正确,执行修复脚本:

# 在book项目根目录执行
mysql -u root -p books_db < src/main/resources/db/fix_admin_user.sql

步骤5:手动创建/修复管理员账号

如果脚本执行失败,可以手动执行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

解决:

UPDATE `users` 
SET `password` = '0192023a7bbd73250516f069df18b500'
WHERE `username` = 'admin';

问题3:角色不是admin

现象: role字段不是 'admin'

解决:

UPDATE `users` 
SET `role` = 'admin'
WHERE `username` = 'admin';

问题4:用户状态未激活

现象: status字段不是 1

解决:

UPDATE `users` 
SET `status` = 1
WHERE `username` = 'admin';

问题5:role字段不存在

现象: 执行查询时提示role字段不存在

解决:

ALTER TABLE `users` 
ADD COLUMN `role` VARCHAR(20) DEFAULT 'user' COMMENT '用户角色:admin-管理员,user-普通用户' AFTER `status`;

✅ 验证修复

1. 检查管理员账号

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 中的数据库配置正确:

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 方法正常工作。可以测试:

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测试登录接口:

curl -X POST http://localhost:8081/api/admin/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"admin123"}'

📝 默认管理员账号信息

  • 用户名: admin
  • 密码: admin123
  • 密码MD5: 0192023a7b
  • 角色: admin
  • 状态: 1(激活)

🔧 快速修复命令

# 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