inblog logo
|
Coding_study
    Spring

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

    yuzu sim's avatar
    yuzu sim
    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

    RSS·Powered by Inblog