Files
workspace/code/base-project/base-go/pkg/middleware/auth.go
T
2025-08-25 17:22:54 +08:00

81 lines
1.6 KiB
Go

package middleware
import (
"base-framework/pkg/config"
"base-framework/pkg/reponse"
"base-framework/pkg/router"
"base-framework/pkg/utils/jwt"
"errors"
"strings"
)
func Auth() router.HandlerFunc {
return func(c *router.Context) {
tokenHeader := c.Header("Authorization")
userIdHeader := c.Header("userId")
orgIDHeader := c.Header("orgId")
// 缺少登录信息
if tokenHeader == "" || userIdHeader == "" || orgIDHeader == "" {
reponse.Error(c).Code(reponse.CodeNoLogin).Send()
c.Abort()
return
}
// Bearer token 格式校验
parts := strings.Fields(tokenHeader)
if len(parts) != 2 || strings.ToLower(parts[0]) != "bearer" {
reponse.Error(c).Code(reponse.CodeInvalidToken).Send()
c.Abort()
return
}
// 解析 token
tokenStr := parts[1]
claims, err := jwt.VerifyToken(tokenStr)
if err != nil {
switch {
case errors.Is(err, jwt.ErrTokenExpired):
reponse.Error(c).Code(reponse.CodeLoginExpired).Send()
default:
reponse.Error(c).Code(reponse.CodeInvalidToken).Send()
}
c.Abort()
return
}
// user_id 校验
if claims.UserID != userIdHeader {
reponse.Error(c).Code(reponse.CodeInvalidToken).Send()
c.Abort()
return
}
// org_id 校验
if claims.OrgID != orgIDHeader {
reponse.Error(c).Code(reponse.CodeInvalidToken).Send()
c.Abort()
return
}
// 检查是否有该机构号
hasOrg := false
for k := range config.GetDBConfigs() {
if k == orgIDHeader {
hasOrg = true
break
}
}
if !hasOrg {
reponse.Error(c).Code(reponse.CodeInvalidOrgCode).Send()
return
}
c.Set("orgId", orgIDHeader)
c.Next()
}
}