/
Arsinenko
/
CompClubAPI_Go
Обзор
Документация
Войти
/
Arsinenko
/
CompClubAPI_Go
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
internal/middleware/auth.go
68 строк
2 KB
Arsinenko
Initial
06 окт 2025, 15:38
06 окт 2025, 15:38
7a1d9f3
Код
Авторство
О чём код?
// middleware/jwt_middleware.go package middleware import ( "fmt" "os" "time" "github.com/golang-jwt/jwt" ) type JwtMiddleware interface { VerifyToken(token string) (*jwt.Token, error) GenerateToken(login, role string) (string, error) GetClaims(token *jwt.Token) (jwt.MapClaims, error) GetSecretKey() string // Добавляем метод для получения секретного ключа } type jwtMiddleware struct { secretKey string } func (j *jwtMiddleware) VerifyToken(tokenStr string) (*jwt.Token, error) { token, err := jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"]) } return []byte(j.secretKey), nil }) return token, err } func (j *jwtMiddleware) GetClaims(token *jwt.Token) (jwt.MapClaims, error) { if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { // Проверяем срок действия if exp, ok := claims["exp"].(float64); ok { if int64(exp) < time.Now().Unix() { return nil, fmt.Errorf("token expired") } } return claims, nil } return nil, fmt.Errorf("invalid token") } func (j *jwtMiddleware) GenerateToken(login, role string) (string, error) { claims := jwt.MapClaims{ "login": login, "exp": time.Now().Add(time.Hour * 24).Unix(), "role": role, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return token.SignedString([]byte(j.secretKey)) } func (j *jwtMiddleware) GetSecretKey() string { return j.secretKey } func NewJwtMiddleware() JwtMiddleware { secretKey := os.Getenv("JWT_SECRET_KEY") if secretKey == "" { // Fallback для разработки secretKey = "default-secret-key-change-in-production" } return &jwtMiddleware{secretKey: secretKey} }