generated from VLADIMIR/template
save refresh token in login route
This commit is contained in:
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"cSpell.words": [
|
||||
"pgxpool"
|
||||
]
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"evening_detective_server/internal/modules/email_sender"
|
||||
"evening_detective_server/internal/modules/password_generator"
|
||||
"evening_detective_server/internal/modules/processor_jwt"
|
||||
"evening_detective_server/internal/repos/refresh_tokens_repo"
|
||||
"evening_detective_server/internal/repos/users_repo"
|
||||
"evening_detective_server/internal/services/users_service"
|
||||
proto "evening_detective_server/proto"
|
||||
@@ -51,7 +52,8 @@ func main() {
|
||||
smtpPassword := os.Getenv("SMTP_PASSWORD")
|
||||
emailSender := email_sender.NewSender(smtpHost, smtpPort, smtpUser, smtpPassword)
|
||||
processorJWT := processor_jwt.NewProcessor(os.Getenv("SECRET"))
|
||||
usersService := users_service.NewUsersService(usersRepo, passwordGenerator, emailSender, processorJWT)
|
||||
refreshTokensRepo := refresh_tokens_repo.NewRefreshTokensRepo(dbpool)
|
||||
usersService := users_service.NewUsersService(usersRepo, passwordGenerator, emailSender, processorJWT, refreshTokensRepo)
|
||||
|
||||
// Create a listener on TCP port
|
||||
lis, err := net.Listen("tcp", ":8080")
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package refresh_tokens_repo
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
)
|
||||
|
||||
type RefreshTokensRepo struct {
|
||||
pool *pgxpool.Pool
|
||||
}
|
||||
|
||||
func NewRefreshTokensRepo(pool *pgxpool.Pool) *RefreshTokensRepo {
|
||||
return &RefreshTokensRepo{
|
||||
pool: pool,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *RefreshTokensRepo) AddRefreshToken(
|
||||
ctx context.Context,
|
||||
userId int,
|
||||
refreshToken string,
|
||||
) error {
|
||||
_, err := s.pool.Exec(
|
||||
ctx,
|
||||
`INSERT INTO refresh_tokens (user_id, refresh_token) VALUES ($1, $2)`,
|
||||
userId,
|
||||
refreshToken,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *RefreshTokensRepo) DeleteRefreshTokensByUserId(
|
||||
ctx context.Context,
|
||||
userId int,
|
||||
) error {
|
||||
_, err := s.pool.Exec(
|
||||
ctx,
|
||||
`DELETE FROM refresh_tokens WHERE user_id = $1`,
|
||||
userId,
|
||||
)
|
||||
return err
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"evening_detective_server/internal/modules/email_sender"
|
||||
"evening_detective_server/internal/modules/password_generator"
|
||||
"evening_detective_server/internal/modules/processor_jwt"
|
||||
"evening_detective_server/internal/repos/refresh_tokens_repo"
|
||||
"evening_detective_server/internal/repos/users_repo"
|
||||
"fmt"
|
||||
"strings"
|
||||
@@ -18,6 +19,7 @@ type UsersService struct {
|
||||
passwordGenerator password_generator.IPasswordGenerator
|
||||
emailSender email_sender.IEmailSender
|
||||
processorJWT processor_jwt.IProcessorJWT
|
||||
refreshTokensRepo *refresh_tokens_repo.RefreshTokensRepo
|
||||
}
|
||||
|
||||
func NewUsersService(
|
||||
@@ -25,12 +27,14 @@ func NewUsersService(
|
||||
passwordGenerator password_generator.IPasswordGenerator,
|
||||
emailSender email_sender.IEmailSender,
|
||||
processorJWT processor_jwt.IProcessorJWT,
|
||||
refreshTokensRepo *refresh_tokens_repo.RefreshTokensRepo,
|
||||
) *UsersService {
|
||||
return &UsersService{
|
||||
usersRepo: usersRepo,
|
||||
passwordGenerator: passwordGenerator,
|
||||
emailSender: emailSender,
|
||||
processorJWT: processorJWT,
|
||||
refreshTokensRepo: refreshTokensRepo,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,8 +134,13 @@ func (s *UsersService) Login(
|
||||
|
||||
fmt.Println(accessToken, refreshToken)
|
||||
|
||||
// delete refresh tokens
|
||||
// save new refresh token
|
||||
if err := s.refreshTokensRepo.DeleteRefreshTokensByUserId(ctx, user.ID); err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
if err := s.refreshTokensRepo.AddRefreshToken(ctx, user.ID, refreshToken); err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
return accessToken, refreshToken, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
-- +goose Up
|
||||
CREATE TABLE IF NOT EXISTS refresh_tokens (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id INT NOT NULL,
|
||||
refresh_token TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- +goose Down
|
||||
DROP TABLE IF EXISTS refresh_tokens;
|
||||
Reference in New Issue
Block a user