Search
Duplicate

[스프링 게시판] 회원가입 기능 추가

@3/20/2023

중복 검증 포함 회원가입 기능

UserRepository
public List<User> findByName(String name) { return em.createQuery("select u from User u where u.name = :name", User.class) .setParameter("name", name) .getResultList(); } public List<User> findByLoginId(String loginId) { return em.createQuery("select u from User u where u.loginId = :loginId", User.class) .setParameter("loginId", loginId) .getResultList(); } public List<User> findByEmail(String email) { return em.createQuery("select u from User u where u.email = :email", User.class) .setParameter("email", email) .getResultList(); }
Java
복사
UserService
public boolean isUsableLoginId(String loginId) { return userRepository.findByLoginId(loginId).isEmpty(); } public boolean isUsableName(String name) { return userRepository.findByName(name).isEmpty(); } public boolean isUsableEmail(String email) { return userRepository.findByEmail(email).isEmpty(); }
Java
복사
UserController
@PostMapping("/new") public String signup( @ModelAttribute UserForm userForm, BindingResult bindingResult ) { if (!userService.isUsableLoginId(userForm.getLoginId())) { bindingResult.rejectValue("loginId", "login.duplicate.loginId", "이미 사용 중인 아이디입니다."); } if (!userService.isUsableEmail(userForm.getEmail())) { bindingResult.rejectValue("email", "login.duplicate.email", "이미 사용 중인 이메일입니다."); } if (!userService.isUsableName(userForm.getName())) { bindingResult.rejectValue("name", "login.duplicate.name", "이미 사용 중인 닉네임입니다."); } if (bindingResult.hasErrors()) { return "users/userForm"; } userService.join(userForm); return "redirect:/"; }
Java
복사
userForm.html
<form action="/users/new" method="post" class="container signup" th:object="${userForm}"> <div class="row d-flex flex-column justify-content-between align-items-center gap-3"> <h4 class="h1 text-center">회원가입</h4> <th:block th:if="${#fields.hasGlobalErrors()}"> <div th:each="err : ${#fields.globalErrors()}" th:text="${err}" class="alert alert-danger mb-0" role="alert"> 에러 메시지 </div> </th:block> <div class="input-group input-group-sm p-0"> <span class="input-group-text w-25 fs-6">이메일</span> <input th:field="*{email}" type="text" class="form-control" aria-label="Sizing example input" name="email"> </div> <div th:errors="*{email}" class="text-danger text-center">에러 메시지</div> <div class="input-group input-group-sm p-0"> <span class="input-group-text w-25 fs-6">아이디</span> <input th:field="*{loginId}" type="text" class="form-control" aria-label="Sizing example input" name="loginId"> </div> <div th:errors="*{loginId}" class="text-danger text-center">에러 메시지</div> ...생략... </div> </form>
Java
복사

관련 커밋

f7fe58e7ad24a11d3f1a0857f1e171b199756830
commit