鉴权类及方法
package init
import (
"errors"
"fmt"
"gin/global"
"gin/utils"
"github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt"
"net/http"
"time"
)
type JWT struct {
// 声明签名信息
Secret []byte
}
// NewJWT 初始化JWT对象
func NewJWT() *JWT {
return &JWT{
Secret: []byte(global.Settings.JwtConfig.Secret),
}
}
// CustomClaims 自定义有效载荷
type CustomClaims struct {
Name string `json:"name"`
UserId string `json:"id"`
jwt.StandardClaims // StandardClaims结构体实现了Claims接口(Valid()函数)
}
// CreateToken 调用jwt-go库生成token
func (j *JWT) CreateToken(claims CustomClaims) (string, error) {
// 指定编码算法为jwt.SigningMethodHS256
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) // 返回一个token结构体指针
return token.SignedString(j.Secret)
}
// ParserToken token解码
func (j *JWT) ParserToken(tokenString string) (*CustomClaims, error) {
// 输入用户自定义的Claims结构体对象,token,以及自定义函数来解析token字符串为jwt的Token结构体指针
token, err := jwt.ParseWithClaims(tokenString, &C