Files
sub2api/backend/cmd/jwtgen/main.go
shaw 49a3c43741 feat(auth): 实现 Refresh Token 机制
- 新增 Access Token + Refresh Token 双令牌认证
- 支持 Token 自动刷新和轮转
- 添加登出和撤销所有会话接口
- 前端实现无感刷新和主动刷新定时器
2026-02-05 12:42:54 +08:00

58 lines
1.3 KiB
Go

package main
import (
"context"
"flag"
"fmt"
"log"
"time"
_ "github.com/Wei-Shaw/sub2api/ent/runtime"
"github.com/Wei-Shaw/sub2api/internal/config"
"github.com/Wei-Shaw/sub2api/internal/repository"
"github.com/Wei-Shaw/sub2api/internal/service"
)
func main() {
email := flag.String("email", "", "Admin email to issue a JWT for (defaults to first active admin)")
flag.Parse()
cfg, err := config.Load()
if err != nil {
log.Fatalf("failed to load config: %v", err)
}
client, sqlDB, err := repository.InitEnt(cfg)
if err != nil {
log.Fatalf("failed to init db: %v", err)
}
defer func() {
if err := client.Close(); err != nil {
log.Printf("failed to close db: %v", err)
}
}()
userRepo := repository.NewUserRepository(client, sqlDB)
authService := service.NewAuthService(userRepo, nil, nil, cfg, nil, nil, nil, nil, nil)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
var user *service.User
if *email != "" {
user, err = userRepo.GetByEmail(ctx, *email)
} else {
user, err = userRepo.GetFirstAdmin(ctx)
}
if err != nil {
log.Fatalf("failed to resolve admin user: %v", err)
}
token, err := authService.GenerateToken(user)
if err != nil {
log.Fatalf("failed to generate token: %v", err)
}
fmt.Printf("ADMIN_EMAIL=%s\nADMIN_USER_ID=%d\nJWT=%s\n", user.Email, user.ID, token)
}