Stories

Detail Return Return

gtoken v2.0.0 正式發佈,基於 GoFrame 的 token 插件 - Stories Detail

本次更新:

此版本主要架構全面更新,發佈 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 結構體,字段解釋如下:

名稱 配置字段 説明
緩存模式 CacheMode 1 gcache 2 gredis 3 fileCache 默認 1
緩存 key CachePreKey 默認緩存前綴 GToken:
超時時間 Timeout 默認 10 天(毫秒)
緩存刷新時間 MaxRefresh 默認為超時時間的一半(毫秒)
Token 分隔符 TokenDelimiter 默認_
Token 加密 key EncryptKey 默認 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

Add a new Comments

Some HTML is okay.