Files
go_process_manager/route/middle/token.go
liuzhihang1 831ea9889f 初次提交
2024-06-26 20:45:23 +08:00

74 lines
1.5 KiB
Go

package middle
import (
"errors"
"msm/consts/ctxflag"
"msm/dao"
"msm/log"
"msm/utils"
"slices"
"github.com/gin-gonic/gin"
)
// code -1为失败,-2为token失效
func rErr(ctx *gin.Context, code int, message string, err error) {
var statusCode int
switch code {
case -1:
statusCode = 500
case -2:
statusCode = 401
default:
statusCode = 200
}
log.Logger.Warn(err)
ctx.JSON(statusCode, map[string]any{
"code": code,
"msg": message,
})
ctx.Abort()
}
func CheckToken() gin.HandlerFunc {
return func(c *gin.Context) {
whiteList := []string{
"/api/user/login",
"/api/user/register/admin",
}
if !slices.Contains(whiteList, c.Request.URL.Path) {
var token string
if c.Request.Header.Get("token") != "" {
token = c.Request.Header.Get("token")
} else {
token = c.Query("token")
}
if _, err := utils.ParseToken(token); err != nil {
rErr(c, -2, "token校验失败", err)
return
}
if username, err := getUser(c); err != nil {
rErr(c, -1, "无法获取user信息", err)
} else {
c.Set(ctxflag.USER_NAME, username)
c.Set(ctxflag.ROLE, dao.UserDao.GetUserByName(username).Role)
}
}
c.Next()
}
}
func getUser(ctx *gin.Context) (string, error) {
var token string
if ctx.Request.Header.Get("token") != "" {
token = ctx.Request.Header.Get("token")
} else {
token = ctx.Query("token")
}
if mc, err := utils.ParseToken(token); err == nil && mc != nil {
return mc.UserName, nil
} else {
return "", errors.Join(errors.New("用户信息获取失败"), err)
}
}