Files
games-wishlist/auth/jwt.go

49 lines
946 B
Go

package auth
import (
"fmt"
"os"
"time"
"github.com/golang-jwt/jwt/v5"
)
var secretKey = os.Getenv("JWT_SECRET_KEY")
type UserClaims struct {
jwt.RegisteredClaims
UserID int64
}
func GenerateUserToken(userId int64, expiryTime time.Time) (string, error) {
now := time.Now()
claims := UserClaims{
UserID: userId,
RegisteredClaims: jwt.RegisteredClaims{
IssuedAt: jwt.NewNumericDate(now),
ExpiresAt: jwt.NewNumericDate(expiryTime),
},
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return token.SignedString([]byte(secretKey))
}
func ValidateUserToken(token string) (int64, error) {
claims := &UserClaims{}
parsed, err := jwt.ParseWithClaims(token, claims, func(t *jwt.Token) (any, error) {
return []byte(secretKey), nil
})
if err != nil {
return -1, fmt.Errorf("failed to parse token: %v", err)
}
if !parsed.Valid {
return -1, fmt.Errorf("invalid token")
}
return claims.UserID, nil
}