package jwt
|
|
import (
|
"github.com/dgrijalva/jwt-go"
|
"github.com/gin-gonic/gin"
|
"outsourcing/conf"
|
"outsourcing/pkg/logx"
|
"strings"
|
)
|
|
type OutsideUserClaims struct {
|
UserId string
|
Username string
|
ParentId string
|
CompanyId uint
|
CompanyName string
|
BufferTime int64
|
jwt.StandardClaims
|
}
|
|
func GetClaims(c *gin.Context) (*OutsideUserClaims, error) {
|
token := c.Request.Header.Get("Authorization")
|
logx.Infof("GetClaims token:%v", token)
|
slices := strings.Split(token, " ")
|
if len(slices) == 2 {
|
token = slices[1]
|
}
|
j := NewOutsideJWT(conf.WebConf.JWTKey)
|
claims, err := j.ParseToken(token)
|
if err != nil {
|
logx.Error("从Gin的Context中获取从jwt解析信息失败, 请检查请求头是否存在x-token且claims是否为规定结构")
|
}
|
return claims, err
|
}
|
|
// GetCompanyID 从Gin的Context中获取从jwt解析出来的公司ID
|
func GetCompanyID(c *gin.Context) uint {
|
if claims, exists := c.Get("claims"); !exists {
|
if cl, err := GetClaims(c); err != nil {
|
return 0
|
} else {
|
return cl.CompanyId
|
}
|
} else {
|
waitUse := claims.(*OutsideUserClaims)
|
return waitUse.CompanyId
|
}
|
}
|
|
// GetUserInfo 从Gin的Context中获取从jwt解析出来的用户信息
|
func GetUserInfo(c *gin.Context) *OutsideUserClaims {
|
if claims, exists := c.Get("claims"); !exists {
|
if cl, err := GetClaims(c); err != nil {
|
return nil
|
} else {
|
return cl
|
}
|
} else {
|
waitUse := claims.(*OutsideUserClaims)
|
return waitUse
|
}
|
}
|