劲创营---任务项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

84 line
2.3 KiB

  1. package mw
  2. import (
  3. "applet/app/comm/db"
  4. "applet/app/comm/e"
  5. "applet/app/comm/utils"
  6. "applet/app/comm/utils/cache"
  7. "applet/app/lib/auth"
  8. "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/implement"
  9. "errors"
  10. "fmt"
  11. "strings"
  12. "github.com/gin-gonic/gin"
  13. )
  14. // AuthJWT is jwt middleware
  15. func StoreAuthJWT(c *gin.Context) {
  16. requestType := c.Request.Header.Get("Request-Type")
  17. requestUid := c.Request.Header.Get("Request-uid")
  18. var mc = new(auth.JWTUser)
  19. var err error
  20. var parts = make([]string, 2)
  21. if requestType != "mq_consume" {
  22. authHeader := c.Request.Header.Get("Authorization")
  23. fmt.Println("test================,", authHeader)
  24. if authHeader == "" {
  25. e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 不能为空"))
  26. return
  27. }
  28. // 按空格分割
  29. parts = strings.SplitN(authHeader, " ", 2)
  30. fmt.Println("test1================,", parts)
  31. if !(len(parts) == 2 && parts[0] == "Bearer") {
  32. e.OutErr(c, e.ERR_TOKEN_FORMAT, errors.New("token 格式不对"))
  33. return
  34. }
  35. // parts[1]是token
  36. mc, err = utils.ParseStoreToken(parts[1])
  37. fmt.Println("test3================,", mc)
  38. if err != nil {
  39. e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 过期或无效"))
  40. return
  41. }
  42. } else {
  43. mc.UID = utils.StrToInt(requestUid)
  44. }
  45. //fmt.Println(mc.UID)
  46. // 获取user
  47. NewCampTaskStoreUserDb := implement.NewCampTaskStoreUserDb(db.DBs[c.GetString("mid")])
  48. u, err := NewCampTaskStoreUserDb.GetCampTaskStoreUser(mc.UID)
  49. if err != nil {
  50. e.OutErr(c, e.ERR_DB_ORM, err)
  51. return
  52. }
  53. if u == nil {
  54. e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 过期或无效"))
  55. return
  56. }
  57. if requestType != "mq_consume" {
  58. // 校验是否和缓存的token一致,只能有一个token 是真实有效
  59. key := fmt.Sprintf("%s:camp_token:%s", c.GetString("mid"), u.Phone)
  60. //fmt.Println(key)
  61. cjwt, err := cache.GetString(key)
  62. if err != nil {
  63. c.Abort()
  64. e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("token expired"))
  65. return
  66. }
  67. if parts[1] != cjwt {
  68. c.Abort()
  69. e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("token expired"))
  70. return
  71. }
  72. }
  73. // 将当前请求的username信息保存到请求的上下文c上
  74. c.Set("camp_store", u)
  75. // 异步处理 有效会员和新会员
  76. c.Next() // 后续的处理函数可以用过c.Get("user")来获取当前请求的用户信息
  77. }