gtoken v2.0.0 正式发布,基于 GoFrame 的 token 插件

本次更新:

此版本主要架构全面更新,发布 v2.X.X,不再兼容 v1.X.X,升级需谨慎

  1. 架构全面升级,版本更新到 v2.X.X,不再兼容 v1.X.X
  2. 通过 go get -u -v github.com/goflyfox/gtoken/v2 获取最新版本,升级需谨慎
  3. 独立 Token、Codec、Cache 接口,方便扩展
  4. 采用 goframe 标准中间件方式认证,调用更加直观
  5. 认证错误统一调整为 code:300,便于前端处理
  6. 具体使用细节见项目 ReadMe 文件

gtoken

介绍

基于 GoFrame 框架的 token 插件,通过服务端验证方式实现 token 认证;已完全可以支撑线上 token 认证,通过 Redis 支持集群模式;使用简单,大家可以放心使用;

  • GoFrame v2.X.X 全面适配
  • GoFrame v1.X.X 请使用 gtoken v1.4.X 相关版本;
  • Github 地址:https://github.com/goflyfox/gtoken
  • Gitee 地址:https://gitee.com/goflyfox/gtoken

gtoken 优势

  1. gtoken 支撑单点应用测试使用内存存储,支持个人小项目文件存储,也支持企业集群使用 redis 存储;完全适用于企业生产级使用;
  2. 有效的避免了 jwt 服务端无法退出问题;
  3. 解决 jwt 无法作废已颁布的令牌,只能等到令牌过期问题;
  4. 通过用户扩展信息存储在服务端,有效规避了 jwt 携带大量用户扩展信息导致降低传输效率问题;
  5. 有效避免 jwt 需要客户端实现续签功能,增加客户端复杂度;支持服务端自动续期,客户端不需要关心续签逻辑;

特性说明

  1. 支持 token 认证,不强依赖于 session 和 cookie,适用 jwt 和 session 认证所有场景;
  2. 支持单机 gcache 和集群 gredis 模式;
# 缓存模式 1 gcache 2 gredis 3 fileCache
CacheMode = 2
  1. 支持服务端缓存自动续期功能
// 注:通过MaxRefresh,默认当用户第五天访问时,自动续期
// 超时时间 默认10天
Timeout int
// 缓存刷新时间 默认为超时时间的一半
MaxRefresh int
  1. 框架使用简单,只需要认证拦截器注册、登录 Token 生成、登出 Token 销毁即可;

安装教程

获取最新版本: go get -u -v github.com/goflyfox/gtoken/v2

使用说明

  1. 初始化配置 gtoken.Options {}, 并创建 gtoken 对象 (gtoken.NewDefaultToken);参数详情见《配置项说明》部分
  2. 注册认证中间件 gtoken.NewDefaultMiddleware(gfToken).Auth
  3. 登陆认证成功后,生成 Token(gfToken.Generate)并返回给客户端
  4. 登出时销毁 Token (gfToken.Destroy)
	// 创建gtoken对象
    gftoken := gtoken.NewDefaultToken(gtoken.Options{})
	s.Group("/", func(group *ghttp.RouterGroup) {
		group.Middleware(CORS)
		// 注册GfToken中间件
		group.Middleware(gtoken.NewDefaultMiddleware(gfToken).Auth)

        group.ALL("/system/data", func(r *ghttp.Request) {
            // 获取登陆信息
            _, data, err := gfToken.Get(r.Context(), r.GetCtxVar(gtoken.KeyUserKey).String())
            if err != nil {
                r.Response.WriteJson(RespError(err))
            }
            r.Response.WriteJson(RespSuccess(data))
        })
		group.ALL("/user/logout", func(r *ghttp.Request) {
		    // 登出销毁Token 
			_ = gfToken.Destroy(ctx, r.GetCtxVar(gtoken.KeyUserKey).String())
			r.Response.WriteJson(RespSuccess("user logout"))
		})
	})

	s.BindHandler("/login", func(r *ghttp.Request) {
		// 认证成功调用Generate生成Token
		token, err := gfToken.Generate(ctx, username, "1")
		if err != nil {
			r.Response.WriteJson(RespError(err))
			r.ExitAll()
		}
		r.Response.WriteJson(RespSuccess(g.Map{
			gtoken.KeyUserKey: username,
			gtoken.KeyToken:   token,
		}))

	})

配置项说明

具体可参考 GfToken 结构体,字段解释如下:

名称配置字段说明
缓存模式CacheMode1 gcache 2 gredis 3 fileCache 默认 1
缓存 keyCachePreKey默认缓存前缀 GToken:
超时时间Timeout默认 10 天(毫秒)
缓存刷新时间MaxRefresh默认为超时时间的一半(毫秒)
Token 分隔符TokenDelimiter默认_
Token 加密 keyEncryptKey默认 12345678912345678912345678912345
是否支持多端登录MultiLogin默认 false
拦截排除地址excludePaths此路径列表不进行认证

示例

使用示例,请先参考 gtoken/example/sample/test/backend/server.go 文件

感谢

  1. gf 框架 https://github.com/gogf/gf
  2. 历史文档 v1:https://goframe.org/pages/viewpage.action?pageId=1115974
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值