添加注册验证码

This commit is contained in:
junleea 2025-05-14 11:13:05 +08:00
parent d004afada8
commit bc31944d61
1 changed files with 92 additions and 0 deletions

View File

@ -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)
}