BackRouter.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package router
  2. import (
  3. "context"
  4. "demo/configs"
  5. "demo/data/dao"
  6. "demo/data/domain"
  7. "demo/share"
  8. "fmt"
  9. "github.com/gin-gonic/gin"
  10. "github.com/mojocn/base64Captcha"
  11. "github.com/spf13/cast"
  12. "net/http"
  13. "strings"
  14. "time"
  15. )
  16. func BackRouter(engine *gin.RouterGroup) {
  17. user := engine.Group("/back")
  18. {
  19. user.POST("/login", login)
  20. user.GET("/code", VerificationCode)
  21. user.GET("/state", GetBackUserState)
  22. //获取用户信息
  23. }
  24. }
  25. var ctx = context.Background()
  26. func login(c *gin.Context) {
  27. data := share.GetJsonAnyParam(c)
  28. username, _ := data("username")
  29. password, _ := data("password")
  30. code, _ := data("code")
  31. codeMap := cast.ToStringMapString(code)
  32. //判断验证码是否正确
  33. redisCode := configs.RedisDb.Get(ctx, fmt.Sprint("VerificationBackCode_", codeMap["id"]))
  34. if redisCode.Val() != codeMap["code"] {
  35. c.JSON(http.StatusOK, CreateResultError(400, "验证码错误!!!"))
  36. return
  37. }
  38. // 定义正则表达式
  39. user, err := dao.Logins(cast.ToString(username), cast.ToString(password))
  40. if err == nil && user.Id != 0 {
  41. fmt.Println("用户登录成功!!!")
  42. token, err := share.GenerateToken("back" + cast.ToString(user.Id))
  43. if err == nil {
  44. c.Header("auth-sign", token)
  45. c.JSON(http.StatusOK, CreateResultData(map[string]string{"token": token}))
  46. } else {
  47. c.JSON(http.StatusOK, CreateResultError(400, "生成token失败!!!"))
  48. }
  49. } else {
  50. fmt.Println("用户登录失败!!!")
  51. c.JSON(http.StatusOK, CreateResultError(401, "用户密码错误!!!"))
  52. }
  53. }
  54. func isLogin(c *gin.Context) {
  55. data := share.GetJsonAnyParam(c)
  56. username, _ := data("username")
  57. password, _ := data("password")
  58. code, _ := data("code")
  59. codeMap := cast.ToStringMapString(code)
  60. //判断验证码是否正确
  61. redisCode := configs.RedisDb.Get(ctx, fmt.Sprint("VerificationCode_", codeMap["id"])).String()
  62. if redisCode != codeMap["value"] {
  63. c.JSON(http.StatusOK, CreateResultError(400, "验证码错误!!!"))
  64. return
  65. }
  66. // 定义正则表达式
  67. user, err := dao.Logins(cast.ToString(username), cast.ToString(password))
  68. fmt.Println("user:", user)
  69. if err == nil && user.Id != 0 {
  70. fmt.Println("用户登录成功!!!")
  71. token, err := share.GenerateToken("back_" + cast.ToString(user.Id))
  72. if err == nil {
  73. c.Header("auth-sign", token)
  74. c.JSON(http.StatusOK, CreateResultData(map[string]string{"token": token}))
  75. } else {
  76. c.JSON(http.StatusOK, CreateResultError(400, "生成token失败!!!"))
  77. }
  78. } else {
  79. fmt.Println("用户登录失败!!!")
  80. c.JSON(http.StatusOK, CreateResultError(401, "用户密码错误!!!"))
  81. }
  82. }
  83. func VerificationCode(c *gin.Context) {
  84. // 配置
  85. driver := base64Captcha.NewDriverDigit(80, 240, 4, 0.5, 80)
  86. store := base64Captcha.DefaultMemStore
  87. captcha := base64Captcha.NewCaptcha(driver, store)
  88. // 生成验证码
  89. id, b64s, answer, err := captcha.Generate()
  90. if err != nil {
  91. c.JSON(500, gin.H{"error": err.Error()})
  92. return
  93. }
  94. err = configs.RedisDb.Set(ctx, "VerificationBackCode_"+id, answer, 0).Err()
  95. if err != nil {
  96. fmt.Println(err)
  97. }
  98. err = configs.RedisDb.Expire(ctx, "VerificationBackCode_"+id, 60*time.Second).Err()
  99. if err != nil {
  100. panic(err)
  101. }
  102. // 返回验证码图片
  103. c.JSON(200, gin.H{
  104. "message": "获取成功!!!",
  105. "expires": time.Now().Add(time.Minute * 5).Unix(),
  106. "code": 200,
  107. "data": map[string]string{"id": id, "image": b64s},
  108. })
  109. }
  110. func GetBackUserState(c *gin.Context) {
  111. header := c.GetHeader("auth-sign")
  112. if header == "" {
  113. c.JSON(200, CreateResultError(406, "用户未登录"))
  114. return
  115. }
  116. claims, err := share.ParseToken(header)
  117. if err != nil {
  118. c.JSON(200, CreateResultError(406, "用户未登录"))
  119. return
  120. }
  121. var userInfo = domain.ManageUser{}
  122. backUserId := claims["iss"].(string)
  123. fmt.Println(backUserId, "backUserId")
  124. if strings.Index(backUserId, "back_") == 0 {
  125. backUserId = strings.Replace(backUserId, "back_", "", 1)
  126. } else {
  127. c.JSON(200, CreateResultError(406, "用户未登录"))
  128. }
  129. _, err = configs.Engine.Table("manage_user").Where("id = ?", claims["iss"]).Get(&userInfo)
  130. if err != nil {
  131. c.JSON(200, CreateResultError(406, "用户未登录"))
  132. return
  133. }
  134. c.JSON(200, CreateResultData(map[string]any{
  135. "info": userInfo,
  136. }))
  137. }