From 84f2fe30ce408494bebbd9a952fb31bff9e8ae91 Mon Sep 17 00:00:00 2001 From: medaminefracso Date: Mon, 23 Oct 2023 16:43:33 +0200 Subject: [PATCH 1/2] bugfix : prevented creation of duplicate users --- .../security/auth/AuthenticationService.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/alibou/security/auth/AuthenticationService.java b/src/main/java/com/alibou/security/auth/AuthenticationService.java index 53193a7..03d6369 100644 --- a/src/main/java/com/alibou/security/auth/AuthenticationService.java +++ b/src/main/java/com/alibou/security/auth/AuthenticationService.java @@ -32,14 +32,18 @@ public class AuthenticationService { private final AuthenticationManager authenticationManager; public AuthenticationResponse register(RegisterRequest request) { - var user = User.builder() - .firstname(request.getFirstname()) - .lastname(request.getLastname()) - .email(request.getEmail()) - .password(passwordEncoder.encode(request.getPassword())) - .role(request.getRole()) - .build(); - var savedUser = repository.save(user); + // Check if the given user exists in database + boolean isPresent = repository.findByEmail(request.getEmail()).isPresent(); + var user = isPresent + ? repository.findByEmail(request.getEmail()).get() + : User.builder() + .firstname(request.getFirstname()) + .lastname(request.getLastname()) + .email(request.getEmail()) + .password(passwordEncoder.encode(request.getPassword())) + .role(request.getRole()) + .build(); + var savedUser = isPresent ? user : repository.save(user); var jwtToken = jwtService.generateToken(user); var refreshToken = jwtService.generateRefreshToken(user); saveUserToken(savedUser, jwtToken); From f041214ebaa3d0ab3cea2d227c2fbc51238207de Mon Sep 17 00:00:00 2001 From: medaminefracso Date: Thu, 28 Dec 2023 13:33:43 +0100 Subject: [PATCH 2/2] fixed : fetch user once --- .../security/auth/AuthenticationService.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/alibou/security/auth/AuthenticationService.java b/src/main/java/com/alibou/security/auth/AuthenticationService.java index 03d6369..63c224a 100644 --- a/src/main/java/com/alibou/security/auth/AuthenticationService.java +++ b/src/main/java/com/alibou/security/auth/AuthenticationService.java @@ -21,6 +21,7 @@ import org.springframework.stereotype.Service; import java.io.IOException; +import java.util.Optional; @Service @RequiredArgsConstructor @@ -33,20 +34,25 @@ public class AuthenticationService { public AuthenticationResponse register(RegisterRequest request) { // Check if the given user exists in database - boolean isPresent = repository.findByEmail(request.getEmail()).isPresent(); - var user = isPresent - ? repository.findByEmail(request.getEmail()).get() - : User.builder() - .firstname(request.getFirstname()) - .lastname(request.getLastname()) - .email(request.getEmail()) - .password(passwordEncoder.encode(request.getPassword())) - .role(request.getRole()) - .build(); - var savedUser = isPresent ? user : repository.save(user); + Optional userOptional = repository.findByEmail(request.getEmail()); + User user; + + if(userOptional.isPresent()) { + user = userOptional.get(); + } else { + user = User.builder() + .firstname(request.getFirstname()) + .lastname(request.getLastname()) + .email(request.getEmail()) + .password(passwordEncoder.encode(request.getPassword())) + .role(request.getRole()) + .build(); + repository.save(user); + } + var jwtToken = jwtService.generateToken(user); var refreshToken = jwtService.generateRefreshToken(user); - saveUserToken(savedUser, jwtToken); + saveUserToken(user, jwtToken); return AuthenticationResponse.builder() .accessToken(jwtToken) .refreshToken(refreshToken)