当开发登录验证系统的时候
现在基本都是使用的jwt来实现的权限校验
这时候就涉及到了jwt的加密和解密
可以参考下面的使用方法
tools/jwt.go
package tools
import (
"github.com/dgrijalva/jwt-go"
"time"
)
const SECRET = "taoshihan"
type UserClaims struct {
Id uint `json:"id"`
Pid uint `json:"pid"`
Username string `json:"username"`
RoleId uint `json:"role_id"`
CreateTime time.Time `json:"create_time"`
jwt.StandardClaims
}
func MakeCliamsToken(obj UserClaims) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, obj)
tokenString, err := token.SignedString([]byte(SECRET))
return tokenString, err
}
func ParseCliamsToken(token string) (*UserClaims, error) {
tokenClaims, err := jwt.ParseWithClaims(token, &UserClaims{}, func(token *jwt.Token) (interface{}, error) {
return []byte(SECRET), nil
})
if tokenClaims != nil {
if claims, ok := tokenClaims.Claims.(*UserClaims); ok && tokenClaims.Valid {
return claims, nil
}
}
return nil, err
}
测试
tools/jwt_test.go
package tools
import (
"github.com/dgrijalva/jwt-go"
"testing"
"time"
)
func TestJwt(t *testing.T) {
tokenCliams := UserClaims{
Id: 1,
Username: "kefu2",
RoleId: 2,
Pid: 1,
CreateTime: time.Now(),
StandardClaims: jwt.StandardClaims{
ExpiresAt: time.Now().Unix() + 24*3600,
},
}
token, err := MakeCliamsToken(tokenCliams)
t.Log(token, err)
orgToken, err := ParseCliamsToken(token)
t.Logf("%+v,%+v", orgToken, err)
}
运行测试用例,可以看到加解密效果
可以测试下过期