BackRouter.go 3.2 KB

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