v1.0.3

API 參考

最後更新


github.com/pardnchiu/go-jwt/core(package goJwt)所有匯出的函式、方法與型別。

函式


簽章說明
func New(c Config) (*JWTAuth, error)套用預設值、載入或產生金鑰、連線 Redis 並 PING,回傳實例
func GetAuthDataFromGinContext(c *gin.Context) (*Auth, bool)讀取 GinMiddleware 存入的使用者資料
func GetAuthDataFromHTTPRequest(r *http.Request) (*Auth, bool)讀取 HTTPMiddleware 存入 request context 的使用者資料

JWTAuth 方法


簽章說明
func (j *JWTAuth) Create(w http.ResponseWriter, r *http.Request, auth *Auth) JWTAuthResult簽發 Access Token 與 Refresh ID,寫入 Cookie 與 Redis;auth 為 nil 時回 400 data_missing
func (j *JWTAuth) Verify(w http.ResponseWriter, r *http.Request) JWTAuthResult驗證請求,必要時透明刷新(見 驗證流程)
func (j *JWTAuth) Revoke(w http.ResponseWriter, r *http.Request) JWTAuthResult清除 Cookie、撤銷 Access Token、Refresh ID 5 秒後失效(見 撤銷)
func (j *JWTAuth) GinMiddleware() gin.HandlerFuncGin 中介層(見 中介層)
func (j *JWTAuth) HTTPMiddleware(next http.Handler) http.Handlernet/http 中介層
func (j *JWTAuth) Close() error關閉 Redis 連線

JWTAuth 的欄位皆未匯出;同一個實例可在多個 goroutine 間共用。

設定型別


型別說明
Config頂層設定:Redis、File、Option、Cookie、CheckAuth
RedisHost、Port、Password、DB
FilePrivateKeyPath、PublicKeyPath
Option金鑰內容、有效期、Cookie 名稱、MaxVersion、RefreshTTL
CookieDomain、Path、SameSite、Secure、HttpOnly(皆為指標)

欄位與預設值見 設定。

結果與資料型別


  1. type Auth struct {
  2. ID string `json:"id"`
  3. Name string `json:"name"`
  4. Email string `json:"email"`
  5. Thumbnail string `json:"thumbnail,omitempty"`
  6. Scope []string `json:"scope,omitempty"`
  7. Role string `json:"role,omitempty"`
  8. Level int `json:"level,omitempty"`
  9. }
  10. type JWTAuthResult struct {
  11. StatusCode int `json:"status_code"`
  12. Success bool `json:"success"`
  13. Data *Auth `json:"data,omitempty"`
  14. Token *TokenResult `json:"token,omitempty"`
  15. Error string `json:"error,omitempty"`
  16. ErrorTag string `json:"error_tag,omitempty"`
  17. }
  18. type TokenResult struct {
  19. Token string `json:"token"`
  20. RefreshId string `json:"refresh_id"`
  21. }

型別何時有值
JWTAuthResult.DataCreate、Verify 成功時
JWTAuthResult.TokenCreate 成功時;Verify 觸發刷新並成功時
JWTAuthResult.ErrorTag失敗時,值見 狀態碼與錯誤標籤

內部狀態型別


這些型別有匯出,但呼叫端通常不需要直接使用:
型別說明
RefreshDataRedis refresh:<id> 的內容:Data、Version、Fingerprint、Exp、Iat、Jti(見 Token 模型)
RefreshId計算 Refresh ID 雜湊的輸入:ID、Name、Email、Fingerprint、Iat、Jti
Pem解析後的 ECDSA 金鑰對;欄位 private、public 未匯出,無法從外部建立或讀取
EN