[TiStory] 회원가입, 로그인, 로그아웃

yuzu sim's avatar
Sep 12, 2024
[TiStory] 회원가입, 로그인, 로그아웃

우선, 비밀번호 확인은 추후 ajax를 통해서 할 것이기 때문에 생략하고 진행한다.
 

1. 회원가입 - 화면확인

notion image

2. UserRequest - JoinDTO생성

@Data public static class JoinDTO { private String username; private String password; private String email; public User toEntity() { return User.builder() .username(username) .password(password) .email(email) .build(); } }

3. UserJPARepository - 유저 중복 조회 쿼리

@Query("select u from User u where u.username = :username") Optional<User> findByUsername(@Param("username") String username);

4. UserService

  • 회원가입 시 트랜잭션 처리를 통해 유저를 등록
@Transactional public User join(UserRequest.JoinDTO reqDTO){ // 유저네임 중복검사(서비스 체크) - DB 연결이 필요함 Optional<User> userOP = userJPARepo.findByUsername(reqDTO.getUsername()); // isPresent가 있으면 비정상 if (userOP.isPresent()) { // 유저 중복 throw new ApiException400("중복된 아이디입니다."); // 예외처리 } // 아닌 경우 정상적으로 저장 User user = userJPARepo.save(reqDTO.toEntity()); return user; }
💡
중복되면 메세지 뜸
notion image

4. UserController

@PostMapping("/join") public String join(UserRequest.JoinDTO reqDTO){ User sessionUser = userService.join(reqDTO); // 회원가입 후 바로 로그인 session.setAttribute("sessionUser", sessionUser); return "redirect:/"; }
💡
회원가입 후 바로 로그인할 수 있게 구현
 

5. 쿼리 날라가는지 확인

notion image
 

6. DB 데이터 확인

notion image

7. 로그인 - 화면확인

notion image

8. UserRequest - LoginDTO생성

@Data public static class LoginDTO { private String username; private String password; }
 

9. UserJPARepository

// 로그인용 쿼리메소드 Optional<User> findByUsernameAndPassword(String username, String password);
 

10. UserService

public User login(UserRequest.LoginDTO reqDTO){ User sessionUser = userJPARepo.findByUsernameAndPassword(reqDTO.getUsername(), reqDTO.getPassword()) .orElseThrow(() -> new Exception401("아이디 혹은 비밀번호를 확인해주세요.")); // orElseThrow 값이 null이면 이라는 뜻 return sessionUser; // 세션에 저장 }
💡
Exception 으로 던지기…
 

11. UserController

@PostMapping("/login") public String login(UserRequest.LoginDTO reqDTO) { User sessionUser = userService.login(reqDTO); session.setAttribute("sessionUser", sessionUser); return "redirect:/"; }

12. 쿼리 확인

notion image
notion image
 

13. 로그아웃

@GetMapping("/logout") public String logout() { session.invalidate(); return "redirect:/"; }
 
Share article

Coding_study