添加注册验证码
This commit is contained in:
parent
d004afada8
commit
bc31944d61
|
|
@ -12,12 +12,14 @@ import (
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/golang-jwt/jwt"
|
"github.com/golang-jwt/jwt"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SetUpUserGroup(router *gin.Engine) {
|
func SetUpUserGroup(router *gin.Engine) {
|
||||||
userGroup := router.Group("/user")
|
userGroup := router.Group("/user")
|
||||||
userGroup.POST("/register", registerHandler)
|
userGroup.POST("/register", registerHandler)
|
||||||
|
userGroup.POST("/register_code", handleRegisterCode) //注册验证码
|
||||||
userGroup.POST("/login", loginHandler)
|
userGroup.POST("/login", loginHandler)
|
||||||
userGroup.POST("/uuid", GetScanUUID)
|
userGroup.POST("/uuid", GetScanUUID)
|
||||||
userGroup.POST("/gqr", GetQRStatus)
|
userGroup.POST("/gqr", GetQRStatus)
|
||||||
|
|
@ -41,6 +43,7 @@ type RLReq struct {
|
||||||
Email string `json:"email" form:"email"`
|
Email string `json:"email" form:"email"`
|
||||||
Password string `json:"password" form:"password"`
|
Password string `json:"password" form:"password"`
|
||||||
Age int `json:"age" form:"age"`
|
Age int `json:"age" form:"age"`
|
||||||
|
Code string `json:"code" form:"code"` //验证码
|
||||||
Gender string `json:"gender" form:"gender"`
|
Gender string `json:"gender" form:"gender"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -490,6 +493,65 @@ func registerHandler(c *gin.Context) {
|
||||||
return
|
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) {
|
func GetSyncUserInfo(c *gin.Context) {
|
||||||
var req_data proto.SyncUserReq
|
var req_data proto.SyncUserReq
|
||||||
if err := c.ShouldBind(&req_data); err == nil {
|
if err := c.ShouldBind(&req_data); err == nil {
|
||||||
|
|
@ -622,3 +684,33 @@ func DeleteThirdPartyLogin(c *gin.Context) {
|
||||||
}
|
}
|
||||||
c.JSON(200, resp)
|
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