update refresh

This commit is contained in:
2026-07-06 12:58:27 +07:00
parent e4007eb15a
commit 57687d1d62
15 changed files with 483 additions and 66 deletions
+54 -13
View File
@@ -9,7 +9,7 @@ import (
"evening_detective_server/internal/repos/refresh_tokens_repo"
"evening_detective_server/internal/repos/users_repo"
"fmt"
"strings"
"time"
"golang.org/x/crypto/bcrypt"
)
@@ -56,7 +56,7 @@ func (s *UsersService) AddUser(
username,
email,
string(hashedPassword),
"user",
[]string{"user"},
)
if err != nil {
return err
@@ -119,26 +119,67 @@ func (s *UsersService) Login(
return "", "", errors.New("Не верен email или пароль")
}
roles := strings.Split(user.Role, " ")
accessToken, err := s.processorJWT.GenerateAccessToken(user.ID, user.Email, roles)
accessToken, err := s.processorJWT.GenerateAccessToken(user.ID, user.Email, user.Roles)
if err != nil {
fmt.Println(err)
return "", "", errors.New("Не получилось получить доступ")
}
refreshToken, err := s.processorJWT.GenerateRefreshToken(user.ID)
if err != nil {
fmt.Println(err)
return "", "", errors.New("Не получилось получить доступ")
}
refreshTokenClaims, err := s.processorJWT.GetClaims(refreshToken)
if err != nil {
return "", "", errors.New("Не получилось получить доступ")
}
fmt.Println(accessToken, refreshToken)
if err := s.refreshTokensRepo.DeleteRefreshTokensByUserId(ctx, user.ID); err != nil {
return "", "", err
}
if err := s.refreshTokensRepo.AddRefreshToken(ctx, user.ID, refreshToken); err != nil {
if err := s.refreshTokensRepo.AddRefreshToken(ctx, user.ID, refreshTokenClaims.ExpiresAt.Time, refreshTokenClaims.ID); err != nil {
return "", "", err
}
return accessToken, refreshToken, nil
}
func (s *UsersService) Refresh(
ctx context.Context,
token string,
) (string, string, error) {
claims, err := s.processorJWT.GetClaims(token)
if err != nil {
return "", "", err
}
ok, err := s.refreshTokensRepo.ExistsRefreshToken(ctx, claims.UserID, claims.ID, time.Now())
if err != nil {
return "", "", err
}
if !ok {
return "", "", errors.New("Пользователь не найден")
}
if err := s.refreshTokensRepo.DeleteRefreshTokenByJti(ctx, claims.ID); err != nil {
return "", "", err
}
user, err := s.usersRepo.GetUserByID(ctx, claims.UserID)
if err != nil {
return "", "", err
}
accessToken, err := s.processorJWT.GenerateAccessToken(user.ID, user.Email, user.Roles)
if err != nil {
return "", "", errors.New("Не получилось получить доступ")
}
refreshToken, err := s.processorJWT.GenerateRefreshToken(user.ID)
if err != nil {
return "", "", errors.New("Не получилось получить доступ")
}
refreshTokenClaims, err := s.processorJWT.GetClaims(refreshToken)
if err != nil {
return "", "", errors.New("Не получилось получить доступ")
}
if err := s.refreshTokensRepo.AddRefreshToken(ctx, user.ID, refreshTokenClaims.ExpiresAt.Time, refreshTokenClaims.ID); err != nil {
return "", "", err
}