[Spring] 프로젝트 / 마이페이지 회원정보 구현하기
- 목차
● 개발 환경
Mac
java21
spring 3.2.2
이클립스
Oracle SQL
웹 팀프로젝트 시작을 하게 되었고
저는 JPA으로 유저기능 백엔드를 하게 되었습니다
다른팀원들이 유저기능 (로그인,회원가입,ouath2) 구현했습니다
로그인을 하면 유저 정보 수정도 있어야합니다~!!
그럼 닉네임변경, 비밀번호 변경을 구현해보겠습니다~!
- 마이페이지에서 나의 닉네임 변경
UserPage.java
@PostMapping("/mypage/change-username")
public String changeUsername (@RequestParam("newNickname") String newNickname, Model model) {
// 닉네임 변경 시도
boolean result = userService.changeNickname(newNickname);
if(!result) {
model.addAttribute("usernameError", "이미 존재하는 닉네임 입니다.");
return "mypage_form";
}
// 닉네임 변경 성공후
return "mypage_form";
}
// 마이페이지에서 닉네임변경 페이지로 이동
@GetMapping("/mypage/change-nickname")
public String showChangeNicknameForm (Model model) {
return "nickname_form";
}
UserService.java
public boolean changeNickname(String newNickname) {
// 이미 (로그인)인증된 유저 정보 가져오기
String currentUsername = SecurityContextHolder.getContext().getAuthentication().getName();
// 현재 사용자의 정보 조회
SiteUser currentUser = userRepository.findByUsername(currentUsername);
if (currentUser == null) {
// 현재 로그인한 사용자를 찾을 수 없으면 예외 발생
throw new UsernameNotFoundException("현재 로그인한 사용자를 찾을 수 없습니다.");
}
// 이미 등록되어 있는 닉네임인지 확인
SiteUser existingUser = userRepository.findByNickname(newNickname);
if (existingUser != null) {
// 이미 존재하는 닉네임이면 변경 불가
return false;
}
// 새로운 닉네임으로 변경
currentUser.setNickname(newNickname);
userRepository.save(currentUser);
return true;
}
- 마이 페이지에서 나의 비밀번호 변경
UserPage.java
@PostMapping("/mypage/change-pass")
public String changeUserPass (@RequestParam("oldPass") String oldPass, @RequestParam("newPass") String newPass, @RequestParam("newPassConfirm") String newPassConfirm, @AuthenticationPrincipal SiteUser currentUser, RedirectAttributes redirectAttributes, Model model) {
// 현재 로그인한 사용자 아이디 가져오기
Long userId = currentUser.getId();
// 비밀번호 변경처리
boolean result = userService.changePass(userId, oldPass, newPass, newPassConfirm);
if (result) {
redirectAttributes.addFlashAttribute("message", "비밀번호가 성공적으로 변경되었습니다.");
return "mypage_form";
} else {
model.addAttribute("errorMessage", "비밀번호 변경에 실패했습니다. 입력 정보를 확인해 주세요.");
return "pass_form";
}
}
UserService.java
private final PasswordEncoder passwordEncoder;
// 비밀번호 변경
public boolean changePass (Long userId, String oldPass, String newPass, String newPassConfirm) {
// 사용자 정보 조회
SiteUser user = userRepository.findById(userId).orElseThrow(() -> new UsernameNotFoundException("사용자 정보를 찾을 수 없습니다."));
if(!passwordEncoder.matches(oldPass, user.getPassword())) {
return false;
}
if(!newPass.equals(newPassConfirm)) {
return false; // 새비밀번호 불일치
}
// 새 비밀번호 저장
user.setPassword(passwordEncoder.encode(newPassConfirm));
userRepository.save(user);
return true; // 비밀번호 변경 성공
}
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
'코딩 > 프로젝트' 카테고리의 다른 글
| [Spring] 프로젝트 / 비밀번호 찾기 & 네이버 이메일 발송 (0) | 2024.05.07 |
|---|