快速開始
安裝 go-jwt、連線 Redis,並用 core 套件(goJwt)發出第一組 Token。
前置需求
- Go 1.24 或更高版本
- Redis 伺服器
安裝
使用 go get
go get github.com/pardnchiu/go-jwt
v1.0.3 之後的 import 路徑:
import goJwt "github.com/pardnchiu/go-jwt/core"
從原始碼
git clone https://github.com/pardnchiu/go-jwt.git
cd go-jwt
go build ./...
最小範例
package main
import (
"log"
"net/http"
goJwt "github.com/pardnchiu/go-jwt/core"
)
func main() {
jwtAuth, err := goJwt.New(goJwt.Config{
Redis: goJwt.Redis{
Host: "localhost",
Port: 6379,
DB: 0,
},
})
if err != nil {
log.Fatalf("init failed: %v", err)
}
defer jwtAuth.Close()
http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) {
result := jwtAuth.Create(w, r, &goJwt.Auth{
ID: "user-1",
Name: "Alice",
Email: "alice@example.com",
Role: "admin",
})
if !result.Success {
http.Error(w, result.Error, result.StatusCode)
return
}
w.WriteHeader(result.StatusCode)
})
log.Fatal(http.ListenAndServe(":8080", nil))
}
New 會載入或自動產生 ECDSA P-256 金鑰、ping Redis,並套用 Option 預設值(Access 15 分鐘、Refresh 7 天)。
保護路由(net/http)
mux := http.NewServeMux()
mux.Handle("/me", jwtAuth.HTTPMiddleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
user, ok := goJwt.GetAuthDataFromHTTPRequest(r)
if !ok {
http.Error(w, "unauthorized", http.StatusUnauthorized)
return
}
_ = user
})))
保護路由(Gin)
r := gin.Default()
auth := r.Group("/")
auth.Use(jwtAuth.GinMiddleware())
auth.GET("/me", func(c *gin.Context) {
user, ok := goJwt.GetAuthDataFromGinContext(c)
if !ok {
c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"})
return
}
c.JSON(http.StatusOK, user)
})