[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; // 비밀번호 변경 성공
   }

 

 

 

 

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

 

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.