🚀 AI 近视防控系统 - 生产环境上线版本 v1.0
✅ 已完成功能: - 后端 Go 服务 (认证/授权/检测) - JWT 认证 + RBAC 权限控制 - 登录速率限制 (5 次失败锁定 15 分钟) - 密码强度校验 - 敏感数据脱敏 - Vue3 管理后台 - 路由守卫 - 删除二次确认 📦 部署配置: - Docker Compose 生产环境配置 - MySQL/Redis/MongoDB 数据库 - Nginx 前端服务 - 强密码安全配置 ⚠️ P2 待办 (下次迭代): - 学生/检测/预警等业务模块实现 - 错误处理统一化 - 缓存策略优化 - 日志分级 📍 生产环境: - 服务器:192.168.15.222 - 管理后台:http://192.168.15.222:8081 - API 服务:http://192.168.15.222:8080 2026-03-29 上线部署完成
This commit is contained in:
75
scripts/test_auth.go
Normal file
75
scripts/test_auth.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// UserAccount 用户账号模型
|
||||
type UserAccount struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
Username string `gorm:"type:varchar(64);uniqueIndex" json:"username"`
|
||||
PasswordHash string `gorm:"type:varchar(255)" json:"-"` // 不在JSON中暴露
|
||||
Name string `gorm:"type:varchar(64)" json:"name"`
|
||||
Phone string `gorm:"type:varchar(20);uniqueIndex" json:"phone"`
|
||||
UserType string `gorm:"type:varchar(16)" json:"user_type"` // student, parent, teacher, admin
|
||||
Status int `gorm:"default:1" json:"status"` // 1:正常, 0:禁用
|
||||
LastLoginAt *time.Time `json:"last_login_at"`
|
||||
LastLoginIP string `json:"last_login_ip"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println("AI近视防控系统 - 登录功能验证测试")
|
||||
|
||||
// 连接到SQLite数据库
|
||||
db, err := gorm.Open(sqlite.Open("test_myopia.db"), &gorm.Config{})
|
||||
if err != nil {
|
||||
log.Fatal("连接数据库失败: ", err)
|
||||
}
|
||||
|
||||
// 测试登录功能
|
||||
testLogin(db, "admin", "Admin123!@#")
|
||||
testLogin(db, "teacher", "Teacher123!@#")
|
||||
testLogin(db, "student", "Student123!@#")
|
||||
testLogin(db, "parent", "Parent123!@#")
|
||||
|
||||
fmt.Println("\n✅ 登录功能验证完成!")
|
||||
fmt.Println("💡 提示: 所有测试账号密码均已正确设置,可正常使用登录功能")
|
||||
}
|
||||
|
||||
func testLogin(db *gorm.DB, username, password string) {
|
||||
fmt.Printf("\n--- 测试用户: %s ---\n", username)
|
||||
|
||||
var user UserAccount
|
||||
result := db.Where("username = ?", username).First(&user)
|
||||
if result.Error != nil {
|
||||
fmt.Printf("❌ 用户不存在: %s\n", username)
|
||||
return
|
||||
}
|
||||
|
||||
if user.Status == 0 {
|
||||
fmt.Printf("❌ 用户已被禁用: %s\n", username)
|
||||
return
|
||||
}
|
||||
|
||||
// 验证密码
|
||||
err := bcrypt.CompareHashAndPassword([]byte(user.PasswordHash), []byte(password))
|
||||
if err != nil {
|
||||
fmt.Printf("❌ 密码验证失败: %s\n", username)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("✅ 用户 %s 登录验证成功!\n", username)
|
||||
fmt.Printf(" - 用户名: %s\n", user.Username)
|
||||
fmt.Printf(" - 姓名: %s\n", user.Name)
|
||||
fmt.Printf(" - 角色: %s\n", user.UserType)
|
||||
fmt.Printf(" - 手机: %s\n", user.Phone)
|
||||
fmt.Printf(" - 状态: %d\n", user.Status)
|
||||
}
|
||||
Reference in New Issue
Block a user