forked from all_user/stat_center
Initial commit
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/dgrijalva/jwt-go"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
const (
|
||||
AdminAccountKey = "AdminAccount"
|
||||
AccountTypeKey = "AccountType"
|
||||
)
|
||||
|
||||
//CreateToken 生成Token算法
|
||||
func CreateToken(secret string, tokenClaims map[string]interface{}) (tokeness string, err error) {
|
||||
if secret == "" {
|
||||
return "", errors.New("secret is empty")
|
||||
}
|
||||
claims := jwt.MapClaims(tokenClaims)
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
||||
tokeness, err = token.SignedString([]byte(secret))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return tokeness, nil
|
||||
}
|
||||
|
||||
func keyFunc(secret string) jwt.Keyfunc {
|
||||
return func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(secret), nil
|
||||
}
|
||||
}
|
||||
|
||||
//ParseToken 解析Token
|
||||
func ParseToken(secret string, tokeness string) (map[string]interface{}, error) {
|
||||
if secret == "" || tokeness == "" {
|
||||
return nil, errors.New("secret or tokeness is empty")
|
||||
}
|
||||
token, err := jwt.Parse(tokeness, keyFunc(secret))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
//验证token,如果token被修改过则为false
|
||||
if !token.Valid {
|
||||
return nil, errors.New("token is invalid")
|
||||
}
|
||||
claimsToken, ok := token.Claims.(jwt.MapClaims)
|
||||
if !ok {
|
||||
return nil, errors.New("cannot convert claim to MapClaim")
|
||||
}
|
||||
return claimsToken, nil
|
||||
}
|
||||
|
||||
// GetAdmin 获取管理员账号
|
||||
// oauth.Auth执行后有效
|
||||
func GetAdmin(ctx *gin.Context) (account string, err error) {
|
||||
val, exists := ctx.Get(AdminAccountKey)
|
||||
if !exists {
|
||||
err = errors.New("admin account not exist")
|
||||
return
|
||||
}
|
||||
|
||||
account, ok := val.(string)
|
||||
if !ok {
|
||||
return "", errors.New("admin account type error")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// GetAccountType 获取账号类型
|
||||
// oauth.Auth执行后有效
|
||||
func GetAccountType(ctx *gin.Context) (string, error) {
|
||||
var err error
|
||||
val, exists := ctx.Get(AccountTypeKey)
|
||||
if !exists {
|
||||
err = errors.New("claims not exist")
|
||||
return "", err
|
||||
}
|
||||
accType, ok := val.(string)
|
||||
if !ok {
|
||||
return "", errors.New("claims type error")
|
||||
}
|
||||
return accType, nil
|
||||
}
|
||||
Reference in New Issue
Block a user