|
- package mw
-
- import (
- "applet/app/comm/db"
- "applet/app/comm/e"
- "applet/app/comm/utils"
- "applet/app/comm/utils/cache"
- "applet/app/lib/auth"
- "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/implement"
- "errors"
- "fmt"
- "strings"
-
- "github.com/gin-gonic/gin"
- )
-
- // AuthJWT is jwt middleware
- func StoreAuthJWT(c *gin.Context) {
- requestType := c.Request.Header.Get("Request-Type")
- requestUid := c.Request.Header.Get("Request-uid")
- var mc = new(auth.JWTUser)
- var err error
- var parts = make([]string, 2)
- if requestType != "mq_consume" {
- authHeader := c.Request.Header.Get("Authorization")
- fmt.Println("test================,", authHeader)
- if authHeader == "" {
- e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 不能为空"))
- return
- }
-
- // 按空格分割
- parts = strings.SplitN(authHeader, " ", 2)
- fmt.Println("test1================,", parts)
-
- if !(len(parts) == 2 && parts[0] == "Bearer") {
- e.OutErr(c, e.ERR_TOKEN_FORMAT, errors.New("token 格式不对"))
- return
- }
- // parts[1]是token
- mc, err = utils.ParseStoreToken(parts[1])
- fmt.Println("test3================,", mc)
-
- if err != nil {
- e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 过期或无效"))
- return
- }
- } else {
- mc.UID = utils.StrToInt(requestUid)
- }
- //fmt.Println(mc.UID)
- // 获取user
- NewCampTaskStoreUserDb := implement.NewCampTaskStoreUserDb(db.DBs[c.GetString("mid")])
- u, err := NewCampTaskStoreUserDb.GetCampTaskStoreUser(mc.UID)
- if err != nil {
- e.OutErr(c, e.ERR_DB_ORM, err)
- return
- }
- if u == nil {
- e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 过期或无效"))
- return
- }
- if requestType != "mq_consume" {
- // 校验是否和缓存的token一致,只能有一个token 是真实有效
- key := fmt.Sprintf("%s:camp_token:%s", c.GetString("mid"), u.Phone)
- //fmt.Println(key)
- cjwt, err := cache.GetString(key)
- if err != nil {
- c.Abort()
- e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("token expired"))
- return
- }
- if parts[1] != cjwt {
- c.Abort()
- e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("token expired"))
- return
- }
- }
- // 将当前请求的username信息保存到请求的上下文c上
- c.Set("camp_store", u)
- // 异步处理 有效会员和新会员
- c.Next() // 后续的处理函数可以用过c.Get("user")来获取当前请求的用户信息
- }
|