BackRouter.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. PushRouter(user, "POST", "/login", BackLogin)
  19. PushRouter(user, "GET", "/code", VerificationBackCode)
  20. PushRouter(user, "GET", "/state", GetBackUserState)
  21. }
  22. var ctx = context.Background()
  23. func BackLogin(c *gin.Context) {
  24. data := share.GetJsonAnyParam(c)
  25. username, _ := data("username")
  26. password, _ := data("password")
  27. code, _ := data("code")
  28. codeMap := cast.ToStringMapString(code)
  29. //判断验证码是否正确
  30. redisCode := configs.RedisDb.Get(ctx, fmt.Sprint("VerificationBackCode_", codeMap["id"]))
  31. if redisCode.Val() != codeMap["code"] {
  32. c.JSON(http.StatusOK, CreateResultError(400, "验证码错误!!!"))
  33. return
  34. }
  35. // 定义正则表达式
  36. user, err := dao.BackLogins(cast.ToString(username), cast.ToString(password))
  37. if err == nil && user.Id != 0 {
  38. fmt.Println("用户登录成功!!!")
  39. token, err := share.GenerateToken("back" + cast.ToString(user.Id))
  40. if err == nil {
  41. c.Header("auth-sign", token)
  42. c.JSON(http.StatusOK, CreateResultData(map[string]string{"token": token}))
  43. } else {
  44. c.JSON(http.StatusOK, CreateResultError(400, "生成token失败!!!"))
  45. }
  46. } else {
  47. fmt.Println("用户登录失败!!!")
  48. c.JSON(http.StatusOK, CreateResultError(401, "用户密码错误!!!"))
  49. }
  50. }
  51. // VerificationBackCode 获取后台验证码登录
  52. func VerificationBackCode(c *gin.Context) {
  53. // 配置
  54. driver := base64Captcha.NewDriverDigit(80, 240, 4, 0.5, 80)
  55. store := base64Captcha.DefaultMemStore
  56. captcha := base64Captcha.NewCaptcha(driver, store)
  57. // 生成验证码
  58. id, b64s, answer, err := captcha.Generate()
  59. if err != nil {
  60. c.JSON(500, gin.H{"error": err.Error()})
  61. return
  62. }
  63. err = configs.RedisDb.Set(ctx, "VerificationBackCode_"+id, answer, 0).Err()
  64. if err != nil {
  65. fmt.Println(err)
  66. }
  67. err = configs.RedisDb.Expire(ctx, "VerificationBackCode_"+id, 60*time.Second).Err()
  68. if err != nil {
  69. panic(err)
  70. }
  71. // 返回验证码图片
  72. c.JSON(200, gin.H{
  73. "message": "获取成功!!!",
  74. "expires": time.Now().Add(time.Minute * 5).Unix(),
  75. "code": 200,
  76. "data": map[string]string{"id": id, "image": b64s},
  77. })
  78. }
  79. func GetBackUserState(c *gin.Context) {
  80. header := c.GetHeader("auth-sign")
  81. if header == "" {
  82. c.JSON(200, CreateResultError(406, "用户未登录"))
  83. return
  84. }
  85. claims, err := share.ParseToken(header)
  86. if err != nil {
  87. c.JSON(200, CreateResultError(406, "用户未登录"))
  88. return
  89. }
  90. var userInfo = domain.ManageUser{}
  91. backUserId := claims["iss"].(string)
  92. fmt.Println(backUserId, "backUserId")
  93. if strings.Index(backUserId, "back_") == 0 {
  94. backUserId = strings.Replace(backUserId, "back_", "", 1)
  95. } else {
  96. c.JSON(200, CreateResultError(406, "用户未登录"))
  97. }
  98. _, err = configs.Engine.Table("manage_user").Where("id = ?", claims["iss"]).Get(&userInfo)
  99. if err != nil {
  100. c.JSON(200, CreateResultError(406, "用户未登录"))
  101. return
  102. }
  103. c.JSON(200, CreateResultData(map[string]any{
  104. "info": userInfo,
  105. }))
  106. }