2023.08.07.월.TIL

heeh·2023년 8월 7일

TIL

목록 보기
59/82
post-thumbnail

2023.08.07.월.TIL

  • 프로젝트 스코프
    • 팀의 목표
  • 팀 SA, 역할 재분배, 정리, ERD, API 작성
  • 프로포티스에 민감한 정보 올리지 않기
    → 환경변수 사용
  • 프로젝트 기능 분배
    1. 사용자 관리 기능 (ㅈㅎ님)
      • 로그인 / 로그아웃 / 회원가입 기능 구현
      • 이메일 인증 기능 구현
      • 사용자 정보 수정 기능 구현
      • 비밀번호 변경 기능 구현
      • aouth 2.0 인증 구현 (선택) = 강의에 있긴 함
    2. 보드 / 컬럼 CRUD (ㅈㅇ님)
      • 보드 생성, 수정, 삭제 기능 구현
      • 보드에 사용자 초대 기능 구현
      • 컬럼 생성, 수정, 삭제, 기능 구현
    3. 카드 CRUD + a (ㄴㅁ님)
      • 카드 생성, 수정, 삭제 기능 구현
      • 카드 순서 변경 (이동) 기능 구현
      • 컬럼 순서 변경 (이동) 기능 구현
    4. 첨부파일 / 체크리스트 / 댓글 CRUD (ㄷㅎ님)
      • 카드 첨부파일 기능 구현
      • 체크리스트 기능 구현
      • 카드에 댓글 CRUD 기능 구현
    5. 알림 기능 (ㄱㅎ님)
      • 카드의 상태가 변경되면 알림이 보드에 참여한 모든 사용자에게 알림 목록에 추가되도록 하는 기능 구현
      • 카드에 댓글이 달리면 카드를 생성한 사람의 알림 목록에 알림이 추가되도록 하는 기능 구현
  • https://github.com/alxqkekrroqkfwk/Hybrid_kanbanBoard/wiki/규칙-!

이메일 인증 코드 기입하고 검증

  • 이 코드를 (응용해서) 사용해야 하는데…
    // 메서드 (EmailVerificationRequestDto emailVerificationRequestDto)
    
        // 이메일 인증을 확인
    //    boolean isVerified = VerificationCodeCheck(emailVerificationRequestDto);
    //        if (!isVerified) {
    //        throw new IllegalArgumentException("이메일 인증이 필요합니다.");
    • UserService - public void signup(SignUpRequestDto requestDto에 넣자니 sign 할 때 넣어주는 Request를 모두 다 같이 넣어주어야 함
    • sign의 정보 입력 → email 인증 코드 받기(보내기) → email 인증 코드 입력 및 검증 → sign 완료되어야 하기 때문에 signRequest와 분리 해줘야 함
    • 하여 메서드를 따로 만들고 작동하게 해야함
  • public class EmailVerification → private boolean isApproved = false;
  • 보통 회원가입의 정보를 입력하고 이메일 인증을 하지만 우리는 백엔드만 테스트하는 입장이어서 이메일 먼저 인증하고 회원가입 순서가 된..다…!?!?!
  • 포스트맨 인증 코드 이메일 전송(받기)
  • 왜 @GetMapping?
    // 받은 인증 코드를 입력하고 검증하기
        @GetMapping("/email") //URL 대문자가 들어가면 안됩니다
        public ResponseEntity<MsgResponseDto> emailCheck(@RequestParam EmailVerificationRequestDto emailVerificationRequestDto) {
            userService.verificationCodePass(emailVerificationRequestDto);
            return ResponseEntity.ok().body(new MsgResponseDto("이메일 인증 성공", HttpStatus.OK.value()));
        }
    • 인증만 할 뿐, 서버 자체에서 변경되는 것이 없다
  • 열심히 했던 코드! → 바뀌고 있음…
    @Transactional
        // 이메일 인증 코드를 확인
        public boolean verificationCodeCheck(EmailVerificationRequestDto emailVerificationRequestDto) {
            String userEmail = emailVerificationRequestDto.getUserEmail();
            int userEnteredVerificationCode = emailVerificationRequestDto.getVerificationCode();
    
            Optional<EmailVerification> emailVerification = emailVerificationRepository.findByUserEmail(userEmail);
            // findByEmail 메서드는 이메일 인증 정보가 존재하면 해당 정보를 Optional로 감싸서 반환하고, 존재하지 않으면 빈 Optional을 반환
    
            if (emailVerification.isPresent()) { // isPresent() 메서드는 Optional<T> 객체에 값이 존재하면 true를 반환하고, 값이 없으면 false를 반환
                // isPresent()를 사용하여 emailVerification 객체에 값이 있는지 여부를 확인
    
                EmailVerification verification = emailVerification.get(); // get() 메서드는 Optional 객체의 값을 반환, 이전에 isPresent()를 사용하여 값이 있는지 확인해서 이 곳에서는 값이 반드시 존재
                // emailVerification.get()을 사용하여 emailVerification 객체에 감싸진 이메일 인증 정보(EmailVerification)를 가져옴
    
                if (verification.getVerificationCode() != userEnteredVerificationCode) {
                    // 저장된 인증 코드(verification.getVerificationCode())와 사용자가 입력한 인증 코드(userEnteredVerificationCode)를 비교하여 일치하지 않으면 throw
                    throw new IllegalArgumentException("올바른 인증 번호가 아닙니다.");
                }
                if (verification.getExpirationDateTime().isBefore(LocalDateTime.now())) {
                    // verification.getExpirationDateTime()를 사용하여 이메일 인증 정보의 인증 코드 유효 기간(expirationDateTime)을 가져오기
                    // 현재 시간(LocalDateTime.now())과 .isBefore를 사용하여 비교하고 throw
                    // (verification.getExpirationDateTime()이 LocalDateTime.now()보다 .isBefore(지났다면)?
                    throw new IllegalArgumentException("인증 시간이 만료되었습니다.");
                }
                verification.approve();
                // 올바른 인증 코드를 입력했을 경우 허가를 해줌 (=인증된 이메일이 됨)
                
    
            } else {
                throw new IllegalArgumentException("유효하지 않은 이메일입니다.");
            }
            return true;
    • @Transactional 물어보기
      • @Transactional 때문에 Optional이 작동하지 않아 false가 되는,,,,?
  • 한 이메일로 인증 번호를 2번 이상 받으면 오류가 나는 상황
    • 새로 인증 번호를 받으면 이전 인증 번호가 삭제되는 것 구현하기
  • @RequiredArgsConstructor 으로 통일!
    • @RequiredArgsConstructor가 없고 setter나 다른 어노테이션, 생성자 그대로 입력 등을 마구잡이로 쓰게 된다면 가독성이 좋지 않다!
    • 오류는 없지만 추가해야 할 것이 생길 수도 있고 코드 유실의 위험이 있다!
  • 로그인 url 질문이 나옴! → JwtAuthenticationFilter에 로그인 구현이 있다
    public JwtAuthenticationFilter(JwtUtil jwtUtil) {
            this.jwtUtil = jwtUtil;
            setFilterProcessesUrl("/api/login");
        }
    • 내일 URL 이야기! → api를 빼거나 다 바꾸거나…?!
profile
공부하자개발하자으쌰으쌰

0개의 댓글