From bc31944d610885f998dc2e96b987bb1597b28011 Mon Sep 17 00:00:00 2001 From: junleea <354425203@qq.com> Date: Wed, 14 May 2025 11:13:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E5=86=8C=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handler/user.go | 92 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/handler/user.go b/handler/user.go index acaae34..883f06c 100644 --- a/handler/user.go +++ b/handler/user.go @@ -12,12 +12,14 @@ import ( "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt" "github.com/google/uuid" + "net/http" "time" ) func SetUpUserGroup(router *gin.Engine) { userGroup := router.Group("/user") userGroup.POST("/register", registerHandler) + userGroup.POST("/register_code", handleRegisterCode) //注册验证码 userGroup.POST("/login", loginHandler) userGroup.POST("/uuid", GetScanUUID) userGroup.POST("/gqr", GetQRStatus) @@ -41,6 +43,7 @@ type RLReq struct { Email string `json:"email" form:"email"` Password string `json:"password" form:"password"` Age int `json:"age" form:"age"` + Code string `json:"code" form:"code"` //验证码 Gender string `json:"gender" form:"gender"` } @@ -490,6 +493,65 @@ func registerHandler(c *gin.Context) { return } +func registerHandlerV2(c *gin.Context) { + var reqData RLReq + var resp proto.GenerateResp + if err := c.ShouldBind(&reqData); err != nil { + if reqData.User == "" || reqData.Email == "" || reqData.Password == "" { + resp.Code = proto.ParameterError + resp.Message = "必要参数不能为空" + } else { + //校验验证码 + code := worker.GetRedis("register_code_" + reqData.Email) + if code != reqData.Code { + resp.Code = proto.OperationFailed + resp.Message = "验证码错误" + } else { + if len(reqData.Password) != 32 { + hasher := md5.New() + hasher.Write([]byte(reqData.Password)) // 生成密码的 MD5 散列值 + reqData.Password = hex.EncodeToString(hasher.Sum(nil)) // 生成密码的 MD5 散列值 + } + if service.ContainsUser(reqData.User, reqData.Email) == true { + resp.Code = proto.UsernameExists + resp.Message = "用户名或邮箱已存在" + } else { + id := service.CreateUser(reqData.User, reqData.Password, reqData.Email, reqData.Gender, reqData.Age) + if id == 0 { + resp.Code = proto.OperationFailed + resp.Message = "创建用户失败" + } else { + // 生成 JWT 令牌 + token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ + "username": reqData.User, + "id": id, + "exp": time.Now().Add(time.Hour * 24).Unix(), // 令牌过期时间, 24小时后过期 + }) + tokenString, err2 := token.SignedString(proto.SigningKey) + if err2 != nil { + resp.Code = proto.TokenGenerationError + resp.Message = "生成token失败" + } else { + // 返回令牌 + data := make(map[string]interface{}) + data["id"] = id + data["username"] = reqData.User + data["email"] = reqData.Email + data["token"] = tokenString + resp.Code = proto.SuccessCode + resp.Message = "success" + } + } + } + } + } + } else { + resp.Code = proto.ParameterError + resp.Message = "解析参数失败" + } + c.JSON(http.StatusOK, resp) +} + func GetSyncUserInfo(c *gin.Context) { var req_data proto.SyncUserReq if err := c.ShouldBind(&req_data); err == nil { @@ -622,3 +684,33 @@ func DeleteThirdPartyLogin(c *gin.Context) { } c.JSON(200, resp) } + +func handleRegisterCode(c *gin.Context) { + var resp proto.GenerateResp + var req RLReq + if err := c.ShouldBind(&req); err == nil { + if req.Email == "" { + resp.Code = proto.ParameterError + resp.Message = "email is empty" + } else { + //查看是否存在该邮箱 + user := dao.FindUserByEmail(req.Email) + if user.ID != 0 { + resp.Code = proto.OperationFailed + resp.Message = "邮箱已存在,请更换邮箱" + } else { + //随机字符串验证码大写 + code := worker.GetRandomString(6) + worker.SetRedisWithExpire("register_code_"+req.Email, code, time.Minute*5) //设置5分钟过期 + //发送邮件 + service.SendEmail(req.Email, "大学生学业作品AI生成工具开发重置密码", "验证码:"+code+" ,请在5分钟内使用!") + resp.Code = proto.SuccessCode + resp.Message = "success" + } + } + } else { + resp.Code = proto.ParameterError + resp.Message = err.Error() + } + c.JSON(http.StatusOK, resp) +}