Refactor JWT service and token DTO to replace TenantID with ClientID for improved clarity and consistency

This commit is contained in:
Habib Fatkhul Rohman 2025-10-15 21:10:56 +07:00
parent 2d20f892e7
commit 6aa45f1522
3 changed files with 14 additions and 11 deletions

View File

@ -10,7 +10,6 @@ const (
type TokenResponse struct { type TokenResponse struct {
AccessToken string `json:"access_token"` AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"` RefreshToken string `json:"refresh_token"`
Role string `json:"role"`
} }
type RefreshTokenRequest struct { type RefreshTokenRequest struct {

View File

@ -1,15 +1,21 @@
package auth package auth
import ( import (
"github.com/Caknoooo/go-gin-clean-starter/modules/user/controller"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/samber/do" "github.com/samber/do"
) )
func RegisterRoutes(server *gin.Engine, injector *do.Injector) { func RegisterRoutes(server *gin.Engine, injector *do.Injector) {
// Auth routes akan ditambahkan nanti ketika auth controller sudah dibuat // Auth routes akan ditambahkan nanti ketika auth controller sudah dibuat
userController := do.MustInvoke[controller.UserController](injector)
authRoutes := server.Group("/api/v1/auth") authRoutes := server.Group("/api/v1/auth")
{ {
// authRoutes.POST("/refresh-token", authController.RefreshToken) // authRoutes.POST("/refresh-token", authController.RefreshToken)
_ = authRoutes // untuk menghindari unused variable authRoutes.POST("/register", userController.Register)
authRoutes.POST("/login", userController.Login)
authRoutes.POST("/verify-email", userController.VerifyEmail)
authRoutes.POST("/send-verification-email", userController.SendVerificationEmail)
} }
} }

View File

@ -12,21 +12,20 @@ import (
) )
type UserTokenInfo struct { type UserTokenInfo struct {
TenantID string `json:"tenant_id"` ClientID string `json:"client_id"`
UserID string `json:"user_id"` UserID string `json:"user_id"`
} }
type JWTService interface { type JWTService interface {
GenerateAccessToken(tenantId string, userId string, role string) string GenerateAccessToken(clientId string, userId string) string
GenerateRefreshToken() (string, time.Time) GenerateRefreshToken() (string, time.Time)
ValidateToken(token string) (*jwt.Token, error) ValidateToken(token string) (*jwt.Token, error)
GetUserIDByToken(token string) (*UserTokenInfo, error) GetUserIDByToken(token string) (*UserTokenInfo, error)
} }
type jwtCustomClaim struct { type jwtCustomClaim struct {
TenantID string `json:"tenant_id"` ClientID string `json:"client_id"`
UserID string `json:"user_id"` UserID string `json:"user_id"`
Role string `json:"role"`
jwt.RegisteredClaims jwt.RegisteredClaims
} }
@ -55,11 +54,10 @@ func getSecretKey() string {
return secretKey return secretKey
} }
func (j *jwtService) GenerateAccessToken(tenantId string, userId string, role string) string { func (j *jwtService) GenerateAccessToken(clientId string, userId string) string {
claims := jwtCustomClaim{ claims := jwtCustomClaim{
TenantID: tenantId, ClientID: clientId,
UserID: userId, UserID: userId,
Role: role,
RegisteredClaims: jwt.RegisteredClaims{ RegisteredClaims: jwt.RegisteredClaims{
ExpiresAt: jwt.NewNumericDate(time.Now().Add(j.accessExpiry)), ExpiresAt: jwt.NewNumericDate(time.Now().Add(j.accessExpiry)),
Issuer: j.issuer, Issuer: j.issuer,
@ -108,9 +106,9 @@ func (j *jwtService) GetUserIDByToken(token string) (*UserTokenInfo, error) {
claims := tToken.Claims.(jwt.MapClaims) claims := tToken.Claims.(jwt.MapClaims)
userId := fmt.Sprintf("%v", claims["user_id"]) userId := fmt.Sprintf("%v", claims["user_id"])
tenantId := fmt.Sprintf("%v", claims["tenant_id"]) clientId := fmt.Sprintf("%v", claims["client_id"])
return &UserTokenInfo{ return &UserTokenInfo{
UserID: userId, UserID: userId,
TenantID: tenantId, ClientID: clientId,
}, nil }, nil
} }