JWT GenToken&ParseToken

JWT(Json Web Token)

获取Token、解密Token

jwt.go

go 复制代码
package jwt

import (
	"errors"
	"time"

	"github.com/golang-jwt/jwt/v5"
)

var jwtSecret = []byte("secret")

type CustomClaims struct {
	Username string `json:"username"`
	jwt.RegisteredClaims
}

func GenToken(username string) (string, error) {
	claims := CustomClaims{
		Username: username,
		RegisteredClaims: jwt.RegisteredClaims{
			ExpiresAt: jwt.NewNumericDate(time.Now().Add(2 * time.Hour)), // 过期时间
			IssuedAt:  jwt.NewNumericDate(time.Now()),                    // 签发时间
			NotBefore: jwt.NewNumericDate(time.Now()),                    // 生效时间
			Issuer:    "bluebell-app",                                    // 签发人
			Subject:   "user-token",                                      // token主题
		},
	}

	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	return token.SignedString(jwtSecret)
}

func ParseToken(tokenString string) (*CustomClaims, error) {
	token, err := jwt.ParseWithClaims(tokenString, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {
		if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
			return nil, errors.New("unexpected signing method")
		}
		return jwtSecret, nil
	})

	if err != nil {
		return nil, err
	}

	if claims, ok := token.Claims.(*CustomClaims); ok && token.Valid {
		return claims, nil
	}

	return nil, errors.New("invalid token")
}
相关推荐
光头闪亮亮9 小时前
ZBar 条码/二维码识别工具介绍及golang通过cmd调用ZBar从图片中批量识别二维码
go
东风t西瓜11 小时前
golang项目开发环境配置
go
zhuyasen1 天前
在某些 Windows 版本,Go 1.25.x 编译出来的 exe 运行报错:此应用无法在你的电脑上运行
windows·go·编译器
用户89535603282201 天前
深入浅出 Go slices 包:类型安全、内存安全与高性能实践
go
王中阳Go2 天前
Python 的 PyPy 能追上 Go 的性能吗?
后端·python·go
gopyer2 天前
180课时吃透Go语言游戏后端开发11:Go语言中的并发编程
golang·go·游戏开发·并发编程
Java陈序员3 天前
简单好用!一款针对 IT 团队开发的文档管理系统!
mysql·docker·go
程序员爱钓鱼3 天前
Go语言实战案例——进阶与部署篇:性能优化与 pprof 性能分析实践
后端·google·go
程序员爱钓鱼4 天前
Go语言实战案例——进阶与部署篇:使用Go编写系统服务(如守护进程)
后端·google·go
n8n5 天前
Go语言GC调优全面指南
go