package controllers import ( "encoding/json" "server/models" "time" "github.com/beego/beego/v2/client/orm" beego "github.com/beego/beego/v2/server/web" ) // 用于签名的密钥 var jwtSecret = []byte("yunzer_jwt_secret_key") // AuthController 处理认证相关请求 type AuthController struct { beego.Controller } // Login 处理登录请求 func (c *AuthController) Login() { var username, password, tenantName string // 优先尝试从URL参数获取 username = c.GetString("username") password = c.GetString("password") tenantName = c.GetString("tenant_name") // 如果URL参数为空,尝试从JSON请求体获取 if username == "" || password == "" || tenantName == "" { var loginData struct { Username string `json:"username"` Password string `json:"password"` TenantName string `json:"tenant_name"` } err := json.Unmarshal(c.Ctx.Input.RequestBody, &loginData) if err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "请求参数格式错误", "data": nil, } c.ServeJSON() return } username = loginData.Username password = loginData.Password tenantName = loginData.TenantName } // 验证参数 if tenantName == "" { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "租户名称不能为空", "data": nil, } c.ServeJSON() return } // 验证用户(先验证租户,再验证租户下的用户) user, err := models.ValidateUser(username, password, tenantName) if err != nil { // 登录失败 c.Data["json"] = map[string]interface{}{ "code": 1, "message": err.Error(), } } else { // 使用models包中的GenerateToken函数生成token tokenString, err := models.GenerateToken(user.Id, user.Username, user.TenantId) if err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "生成token失败", "data": nil, } } else { // 登录成功,写当前时间到last_login_time,并增加login_count loginTime := time.Now() o := orm.NewOrm() _, _ = o.Raw("UPDATE yz_users SET last_login_time = ?, login_count = IFNULL(login_count,0)+1 WHERE id = ?", loginTime, user.Id).Exec() c.Data["json"] = map[string]interface{}{ "code": 0, "message": "登录成功", "data": map[string]interface{}{ "accessToken": tokenString, "token": tokenString, // 兼容性 "user": map[string]interface{}{ "id": user.Id, "username": user.Username, "email": user.Email, "avatar": user.Avatar, "nickname": user.Nickname, "tenant_id": user.TenantId, }, }, } } } c.ServeJSON() } // Logout 处理登出请求 func (c *AuthController) Logout() { // 在实际应用中,这里需要处理JWT或Session的清除 c.Data["json"] = map[string]interface{}{ "success": true, "message": "登出成功", } c.ServeJSON() }