You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package middleware
|
|
|
|
import (
|
|
"fmt"
|
|
"mygo/conf"
|
|
"mygo/dbhelper"
|
|
"mygo/libs"
|
|
"mygo/utils"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
func Access() echo.MiddlewareFunc {
|
|
return func(next echo.HandlerFunc) echo.HandlerFunc {
|
|
return func(c echo.Context) error {
|
|
//在这里处理拦截请求的逻辑
|
|
jwtstr := c.QueryParam("jwt")
|
|
if jwtstr != "" {
|
|
jwtobj, err := libs.JWTDecrypt(jwtstr)
|
|
if !err || jwtobj == nil || jwtobj["token"] == nil || jwtobj["id"] == nil {
|
|
return c.JSON(401, map[string]interface{}{
|
|
"errcode": 2,
|
|
"errmsg": "jwt解析错误",
|
|
})
|
|
}
|
|
|
|
id, ok := jwtobj["id"].(string)
|
|
if !ok {
|
|
return c.JSON(401, map[string]interface{}{
|
|
"errcode": 2,
|
|
"errmsg": "用户信息获取失败",
|
|
})
|
|
}
|
|
if !conf.ISTEST {
|
|
redis := dbhelper.GetRedisDb()
|
|
key := fmt.Sprintf("%s:admin:token:%s", conf.APPNAME, id)
|
|
oldtoken, err1 := redis.Get(key).Result()
|
|
if err1 != nil {
|
|
return c.JSON(401, map[string]interface{}{
|
|
"errcode": 2,
|
|
"errmsg": "获取token失败",
|
|
})
|
|
}
|
|
if jwtobj["token"] != oldtoken {
|
|
return c.JSON(401, map[string]interface{}{
|
|
"errcode": 2,
|
|
"errmsg": "账户已经在其他终端登录",
|
|
})
|
|
}
|
|
}
|
|
c.QueryParams().Add("id", id)
|
|
} else {
|
|
ip := echo.ExtractIPFromXFFHeader()(c.Request())
|
|
ok := utils.IsInnerIp(ip)
|
|
if !ok {
|
|
return c.JSON(401, map[string]interface{}{
|
|
"errcode": 2,
|
|
"errmsg": "服务器繁忙,请稍后再试!",
|
|
})
|
|
}
|
|
}
|
|
return next(c)
|
|
}
|
|
}
|
|
}
|