@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
복사