Skip to content

developpeurk/spring-security-registration-with-angular

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

spring-security-registration-with-angular

Project Logo

´´´´ package com.lambarki.book.auth;

import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;

@Service @RequiredArgsConstructor public class AuthenticationService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; private final RoleRepository roleRepository;

@Transactional
public void register(registrationRequest request) {
    var userRole = roleRepository.findByName("USER")
            .orElseThrow(() -> new IllegalStateException("ROLE USER was not initialized"));
    var user = User.builder()
            .firstname(request.getFirstname())
            .lastname(request.getLastname())
            .email(request.getEmail())
            .password(passwordEncoder.encode(request.getPassword()))
            .accountLocked(false)
            .enabled(false)
            .roles(List.of(userRole))
            .build();

    userRepository.save(user);
}

} ´´´´

´´´´

package com.lambarki.book.auth;

import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*;

import static org.springframework.http.HttpStatus.ACCEPTED;

@RestController @RequestMapping("auth") @RequiredArgsConstructor public class AuthenticationController {

private final AuthenticationService service;

@PostMapping("/register")
@ResponseStatus(ACCEPTED)
public ResponseEntity<?> register(@RequestBody @Valid registrationRequest request) {
    service.register(request);
    return ResponseEntity.accepted().build();
}

@PostMapping("/authenticate")
public ResponseEntity<AuthenticationResponse> authenticate(@RequestBody @Valid AuthenticationRequest request) {
    return ResponseEntity.ok(service.authenticate(request));
}

}

´´´´

´´´´

package com.lambarki.book.auth;

import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime; import java.util.HashMap; import java.util.List;

@Service @RequiredArgsConstructor public class AuthenticationService { private final RoleRepository roleRepository; private final PasswordEncoder passwordEncoder; private final UserRepository userRepository; private final AuthenticationManager authenticationManager; private final JwtService jwtService;

@Transactional
public void register(registrationRequest request) {
    var userRole = roleRepository.findByName("USER")
            .orElseThrow(() -> new IllegalStateException("ROLE USER was not initialized"));
    var user = User.builder()
            .firstname(request.getFirstname())
            .lastname(request.getLastname())
            .email(request.getEmail())
            .password(passwordEncoder.encode(request.getPassword()))
            .accountLocked(false)
            .enabled(true)  // Immediately enable the account on registration
            .roles(List.of(userRole))
            .build();

    userRepository.save(user);
}

public AuthenticationResponse authenticate(AuthenticationRequest request) {
    var auth = authenticationManager.authenticate(
            new UsernamePasswordAuthenticationToken(
                    request.getEmail(),
                    request.getPassword()
            )
    );
    var claims = new HashMap<String, Object>();
    var user = ((User)auth.getPrincipal());
    claims.put("fullName", user.fullName());
    var jwtToken = jwtService.generateToken(claims, user);
    return AuthenticationResponse.builder()
            .token(jwtToken)
            .build();
}

public void activateAccount(String token) {
    var user = userRepository.findById(Integer.parseInt(token))
            .orElseThrow(() -> new UsernameNotFoundException("User not found"));
    user.setEnabled(true);
    userRepository.save(user);
}

}

´´´´

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published