添加注册验证码
This commit is contained in:
parent
d004afada8
commit
bc31944d61
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue