|
@@ -23,28 +23,6 @@ import (
|
|
|
|
|
|
|
|
func UserRouth(engine *gin.RouterGroup) {
|
|
func UserRouth(engine *gin.RouterGroup) {
|
|
|
user := engine.Group("/user")
|
|
user := engine.Group("/user")
|
|
|
- //{
|
|
|
|
|
- // //获取用户基本信息
|
|
|
|
|
- // user.GET("/info", GetUserInfo)
|
|
|
|
|
- // //获取用户钱包
|
|
|
|
|
- // user.GET("/wallet", GetUserWallet)
|
|
|
|
|
- // //修改名字
|
|
|
|
|
- // user.PUT("/name", SetNameValue)
|
|
|
|
|
- // //获取用户的订单信息
|
|
|
|
|
- // user.POST("/order", GetUserOrder)
|
|
|
|
|
- // //用户登录
|
|
|
|
|
- // user.POST("/login", login)
|
|
|
|
|
- // //注册
|
|
|
|
|
- // user.POST("/register", register)
|
|
|
|
|
- //
|
|
|
|
|
- // //发送邮箱注册验证码
|
|
|
|
|
- // user.POST("/registerCode", registerCode)
|
|
|
|
|
- // //发送验证码
|
|
|
|
|
- // user.POST("/sendSms", SendVerificationCode)
|
|
|
|
|
- // //图片验证码
|
|
|
|
|
- // user.GET("/captcha", VerificationCode)
|
|
|
|
|
- //}
|
|
|
|
|
- //获取用户基本信息
|
|
|
|
|
|
|
|
|
|
PushRouter(user, "GET", "/info", GetUserInfo)
|
|
PushRouter(user, "GET", "/info", GetUserInfo)
|
|
|
//获取用户钱包
|
|
//获取用户钱包
|
|
@@ -55,18 +33,66 @@ func UserRouth(engine *gin.RouterGroup) {
|
|
|
PushRouter(user, "POST", "/order", GetUserOrder)
|
|
PushRouter(user, "POST", "/order", GetUserOrder)
|
|
|
//用户登录
|
|
//用户登录
|
|
|
PushRouter(user, "POST", "/login", login)
|
|
PushRouter(user, "POST", "/login", login)
|
|
|
|
|
+ //发送手机验证码 ,模拟
|
|
|
|
|
+ PushRouter(user, "POST", "/loginCode", SendPhoneCode)
|
|
|
|
|
+
|
|
|
//注册
|
|
//注册
|
|
|
PushRouter(user, "POST", "/register", register)
|
|
PushRouter(user, "POST", "/register", register)
|
|
|
//发送邮箱注册验证码
|
|
//发送邮箱注册验证码
|
|
|
PushRouter(user, "POST", "/registerCode", registerCode)
|
|
PushRouter(user, "POST", "/registerCode", registerCode)
|
|
|
- //发送验证码
|
|
|
|
|
- PushRouter(user, "POST", "/sendSms", SendVerificationCode)
|
|
|
|
|
|
|
+
|
|
|
//图片验证码
|
|
//图片验证码
|
|
|
PushRouter(user, "GET", "/captcha", VerificationCode)
|
|
PushRouter(user, "GET", "/captcha", VerificationCode)
|
|
|
|
|
+ //发送验证码
|
|
|
|
|
+ PushRouter(user, "POST", "/sendSms", SendLoginVerificationCode)
|
|
|
PushRouter(user, "GET", "/base/info", GetUserBaseInfo)
|
|
PushRouter(user, "GET", "/base/info", GetUserBaseInfo)
|
|
|
PushRouter(user, "POST", "/base/info", GetUserBaseInfoList)
|
|
PushRouter(user, "POST", "/base/info", GetUserBaseInfoList)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func SendPhoneCode(c *gin.Context) {
|
|
|
|
|
+ data := share.GetJsonAnyParam(c)
|
|
|
|
|
+ var err error
|
|
|
|
|
+ phone, _ := data("phone")
|
|
|
|
|
+ if phone == "" {
|
|
|
|
|
+ c.JSON(200, CreateResultError(401, "参数不全"))
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ // 定义正则表达式
|
|
|
|
|
+ regexPattern := `^1[3-9][0-9]{9}$`
|
|
|
|
|
+
|
|
|
|
|
+ // 编译正则表达式
|
|
|
|
|
+ reg, err := regexp.Compile(regexPattern)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ fmt.Println("Error compiling regex:", err)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ matched := reg.MatchString(cast.ToString(phone))
|
|
|
|
|
+ if !matched {
|
|
|
|
|
+ c.JSON(200, CreateResultError(401, "手机号格式错误"))
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ user, err := dao.GetUserByPhone(cast.ToString(phone))
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ c.JSON(200, CreateResultError(401, "手机号未绑定邮箱"))
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ //user.Email
|
|
|
|
|
+ code := testSendMail(user.Email)
|
|
|
|
|
+ //查看是否已经发送过验证码了
|
|
|
|
|
+ exists := configs.RedisDb.Exists(ctx, "PhoneLoginVerificationCodeTime_"+cast.ToString(phone))
|
|
|
|
|
+ if exists.Val() == 1 {
|
|
|
|
|
+ c.JSON(http.StatusOK, CreateResultError(200, "验证码已经发送,请等待"))
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ set := configs.RedisDb.Set(ctx, "PhoneLoginVerificationCode_"+cast.ToString(phone), code, 5*60*time.Second)
|
|
|
|
|
+ configs.RedisDb.Set(ctx, "PhoneLoginVerificationCodeTime_"+cast.ToString(phone), code, 60*time.Second)
|
|
|
|
|
+ if set.Err() != nil {
|
|
|
|
|
+ c.JSON(200, CreateResultError(401, "发送失败"))
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ c.JSON(200, CreateResult())
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func GetUserBaseInfo(c *gin.Context) {
|
|
func GetUserBaseInfo(c *gin.Context) {
|
|
|
id := c.Query("userId")
|
|
id := c.Query("userId")
|
|
|
if id == "" {
|
|
if id == "" {
|
|
@@ -116,7 +142,7 @@ func GetUserBaseInfoList(c *gin.Context) {
|
|
|
// GetUserInfo 获取用户的个人信息
|
|
// GetUserInfo 获取用户的个人信息
|
|
|
func GetUserInfo(c *gin.Context) {
|
|
func GetUserInfo(c *gin.Context) {
|
|
|
header := c.GetHeader("auth-sign")
|
|
header := c.GetHeader("auth-sign")
|
|
|
- if header == "" {
|
|
|
|
|
|
|
+ if header == "" || header == "null" {
|
|
|
c.JSON(200, CreateResultError(401, "用户未登录"))
|
|
c.JSON(200, CreateResultError(401, "用户未登录"))
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -191,6 +217,7 @@ func GetUserOrder(c *gin.Context) {
|
|
|
c.JSON(200, CreateResultData(vo))
|
|
c.JSON(200, CreateResultData(vo))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// VerificationCode 图片验证码
|
|
|
func VerificationCode(c *gin.Context) {
|
|
func VerificationCode(c *gin.Context) {
|
|
|
// 配置
|
|
// 配置
|
|
|
driver := base64Captcha.NewDriverDigit(80, 240, 4, 0.5, 80)
|
|
driver := base64Captcha.NewDriverDigit(80, 240, 4, 0.5, 80)
|
|
@@ -224,7 +251,6 @@ func VerificationCode(c *gin.Context) {
|
|
|
func login(c *gin.Context) {
|
|
func login(c *gin.Context) {
|
|
|
data := share.GetJsonAnyParam(c)
|
|
data := share.GetJsonAnyParam(c)
|
|
|
var user domain.User
|
|
var user domain.User
|
|
|
- var err error
|
|
|
|
|
username, _ := data("username")
|
|
username, _ := data("username")
|
|
|
password, _ := data("password")
|
|
password, _ := data("password")
|
|
|
t, _ := data("type")
|
|
t, _ := data("type")
|
|
@@ -246,6 +272,22 @@ func login(c *gin.Context) {
|
|
|
c.JSON(http.StatusOK, CreateResultError(400, "邮箱格式错误!!!"))
|
|
c.JSON(http.StatusOK, CreateResultError(400, "邮箱格式错误!!!"))
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
+ user, err = dao.Logins(cast.ToString(username), cast.ToString(password), cast.ToString(t))
|
|
|
|
|
+
|
|
|
|
|
+ if err == nil && user.Id != 0 {
|
|
|
|
|
+ fmt.Println("用户登录成功!!!")
|
|
|
|
|
+ token, err := share.GenerateToken(cast.ToString(user.Id))
|
|
|
|
|
+ if err == nil {
|
|
|
|
|
+ c.Header("auth-sign", token)
|
|
|
|
|
+ c.JSON(http.StatusOK, CreateResultData(map[string]string{"token": token}))
|
|
|
|
|
+ } else {
|
|
|
|
|
+ c.JSON(http.StatusOK, CreateResultError(400, "生成token失败!!!"))
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ fmt.Println("用户登录失败!!!")
|
|
|
|
|
+ c.JSON(http.StatusOK, CreateResultError(401, "用户密码错误!!!"))
|
|
|
|
|
+ }
|
|
|
|
|
+ return
|
|
|
} else if cast.ToString(t) == "phone" {
|
|
} else if cast.ToString(t) == "phone" {
|
|
|
regexPattern := `^1[3-9]\d{9}$`
|
|
regexPattern := `^1[3-9]\d{9}$`
|
|
|
// 编译正则表达式
|
|
// 编译正则表达式
|
|
@@ -262,23 +304,38 @@ func login(c *gin.Context) {
|
|
|
c.JSON(http.StatusOK, CreateResultError(400, "手机格式错误!!!"))
|
|
c.JSON(http.StatusOK, CreateResultError(400, "手机格式错误!!!"))
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- user, err = dao.Logins(cast.ToString(username), cast.ToString(password), cast.ToString(t))
|
|
|
|
|
-
|
|
|
|
|
- if err == nil && user.Id != 0 {
|
|
|
|
|
- fmt.Println("用户登录成功!!!")
|
|
|
|
|
- token, err := share.GenerateToken(cast.ToString(user.Id))
|
|
|
|
|
- if err == nil {
|
|
|
|
|
- c.Header("auth-sign", token)
|
|
|
|
|
- c.JSON(http.StatusOK, CreateResultData(map[string]string{"token": token}))
|
|
|
|
|
|
|
+ //获取用户数据
|
|
|
|
|
+ user, err := dao.GetUserByPhone(cast.ToString(username))
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ fmt.Println(err)
|
|
|
|
|
+ c.JSON(http.StatusOK, CreateResultError(400, "用户未绑定邮箱"))
|
|
|
|
|
+ }
|
|
|
|
|
+ //发送邮件
|
|
|
|
|
+ result, err := configs.RedisDb.Get(ctx, "PhoneLoginVerificationCode_"+user.Phone).Result()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ fmt.Println(err)
|
|
|
|
|
+ c.JSON(http.StatusOK, CreateResultError(400, "验证码已过期"))
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ if result == cast.ToString(password) {
|
|
|
|
|
+ configs.RedisDb.Del(ctx, "PhoneLoginVerificationCode_"+user.Phone)
|
|
|
|
|
+ //登录成功
|
|
|
|
|
+ fmt.Println("用户登录成功!!!")
|
|
|
|
|
+ token, err := share.GenerateToken(cast.ToString(user.Id))
|
|
|
|
|
+ if err == nil {
|
|
|
|
|
+ c.Header("auth-sign", token)
|
|
|
|
|
+ c.JSON(http.StatusOK, CreateResultData(map[string]string{"token": token}))
|
|
|
|
|
+ return
|
|
|
|
|
+ } else {
|
|
|
|
|
+ c.JSON(http.StatusOK, CreateResultError(400, "生成token失败!!!"))
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
} else {
|
|
} else {
|
|
|
- c.JSON(http.StatusOK, CreateResultError(400, "生成token失败!!!"))
|
|
|
|
|
|
|
+ c.JSON(http.StatusOK, CreateResultError(400, "验证码错误!!!"))
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
- fmt.Println("用户登录失败!!!")
|
|
|
|
|
- c.JSON(http.StatusOK, CreateResultError(401, "用户密码错误!!!"))
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+ c.JSON(http.StatusOK, CreateResultError(400, "未知错误!!!"))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func registerCode(c *gin.Context) {
|
|
func registerCode(c *gin.Context) {
|
|
@@ -445,6 +502,40 @@ func register(c *gin.Context) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// SendLoginVerificationCode 发送手机验证码,模拟邮箱验证码
|
|
|
|
|
+func SendLoginVerificationCode(c *gin.Context) {
|
|
|
|
|
+ data := share.GetJsonAnyParam(c)
|
|
|
|
|
+ var err error
|
|
|
|
|
+ username, _ := data("username")
|
|
|
|
|
+ code, _ := data("code")
|
|
|
|
|
+ codeId, _ := data("codeId")
|
|
|
|
|
+ val, err := configs.RedisDb.Get(ctx, cast.ToString(codeId)).Result()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ log.Fatal(err)
|
|
|
|
|
+ }
|
|
|
|
|
+ if val != cast.ToString(code) {
|
|
|
|
|
+ c.JSON(200, gin.H{"code": 400, "message": "验证码错误!!!"})
|
|
|
|
|
+ c.Abort()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ // 定义正则表达式
|
|
|
|
|
+ regexPattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`
|
|
|
|
|
+
|
|
|
|
|
+ // 编译正则表达式
|
|
|
|
|
+ reg, err := regexp.Compile(regexPattern)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ fmt.Println("Error compiling regex:", err)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ matched := reg.MatchString(cast.ToString(username))
|
|
|
|
|
+ dao.SendSms(matched, cast.ToString(username))
|
|
|
|
|
+ c.JSON(200, gin.H{"code": 200, "message": "发送成功!!!"})
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+//==================================================================================================
|
|
|
|
|
+//==================================================================================================
|
|
|
|
|
+//==================================================================================================
|
|
|
|
|
+
|
|
|
func checkEmail(c *gin.Context, email string) bool {
|
|
func checkEmail(c *gin.Context, email string) bool {
|
|
|
//// 定义正则表达式
|
|
//// 定义正则表达式
|
|
|
regexPattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`
|
|
regexPattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`
|
|
@@ -517,33 +608,3 @@ func checkCode(c *gin.Context, code string) bool {
|
|
|
|
|
|
|
|
return true
|
|
return true
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-// SendVerificationCode 发送验证码
|
|
|
|
|
-func SendVerificationCode(c *gin.Context) {
|
|
|
|
|
- data := share.GetJsonAnyParam(c)
|
|
|
|
|
- var err error
|
|
|
|
|
- username, _ := data("username")
|
|
|
|
|
- code, _ := data("code")
|
|
|
|
|
- codeId, _ := data("codeId")
|
|
|
|
|
- val, err := configs.RedisDb.Get(ctx, cast.ToString(codeId)).Result()
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- log.Fatal(err)
|
|
|
|
|
- }
|
|
|
|
|
- if val != cast.ToString(code) {
|
|
|
|
|
- c.JSON(200, gin.H{"code": 400, "message": "验证码错误!!!"})
|
|
|
|
|
- c.Abort()
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- // 定义正则表达式
|
|
|
|
|
- regexPattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`
|
|
|
|
|
-
|
|
|
|
|
- // 编译正则表达式
|
|
|
|
|
- reg, err := regexp.Compile(regexPattern)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- fmt.Println("Error compiling regex:", err)
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
- matched := reg.MatchString(cast.ToString(username))
|
|
|
|
|
- dao.SendSms(matched, cast.ToString(username))
|
|
|
|
|
- c.JSON(200, gin.H{"code": 200, "message": "发送成功!!!"})
|
|
|
|
|
-}
|
|
|