2023.08.10.목.TIL

heeh·2023년 8월 11일

TIL

목록 보기
62/82
post-thumbnail

2023.08.10.목.TIL

  • 인증에 성공한 이메일 기억, 저장했다가 회원 가입 할 때 쓰는 이메일은 인증에 성공해서 저장된 이메일과 비교
  • throw new : console에만 찍힘
    • ex) throw new IllegalArgumentException("인증되지 않은 Email 입니다.");
  • Response : postman에 찍힘
    • ex) return ResponseEntity.ok().body(new MsgResponseDto("이메일 인증 코드 전송 완료", HttpStatus.OK.value()));
    • Response와 body로 인해 postman에서 확인할 수 있다
  • 막힌 부분 해결!
    • setDataExpire에서 key에 이미 email이 있어서 저장하는 메서드 안에서 key를 email로 할 수 없게 됨.. 막힘….
      public void setDataExpire(String key, String value, long duration) {
              //  duration 동안 (key, value)를 저장한다.
              ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
              Duration expireDuration = Duration.ofSeconds(duration);
      
              // 인증 코드 값을 value에 저장
              valueOperations.set(key, value, expireDuration);
          }
    • 저장해주는 save 메서드를 만들고 그 key는 임의(success)로 써주고 value는 email로 가져온다!
      → key 자리는 이미 쓰고 있기 때문에 email을 넣으면 안될 것 같고… value에 넣고 잠시 저장하는 느낌으로 가져다가 썼다!
      ```java
      public void save(String key, String value, long duration) {
              //  duration 동안 (key, value)를 저장한다.
              ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
              Duration expireDuration = Duration.ofSeconds(duration);
      
              // 인증 코드 값을 value에 저장
              valueOperations.set(key, value, expireDuration);
          }
      ```
    • 잠시 저장하는 것이 redis를 사용하는 이유…!!!
    • save에서 저장해주고 저장해 준 것을 getEmail로 불러와야 한다~!
      public String getEmail(String key) { // key를 통해 value(데이터)를 얻는다.
              ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
              log.info("key : " + key);
              return valueOperations.get(key);
          }
    • EmailServiceImp
      @Override
          public boolean verificationCodeCheck(String email, String verificationCode) {
              String codeFindByEmail = redisUtil.getData(email);
              if (codeFindByEmail == null) {
                  return false;
              }
              redisUtil.save("success", email, 60 * 50L);
              return redisUtil.getData(email).equals(verificationCode);
          }
      • redisUtil.save("success", email, 60 * 50L); 추가
    • UserService - signup
      // key에 맞는 value를 줌
              String verifiedEmail = redisUtil.getEmail("success");
              if (verifiedEmail == null) {
                  throw new IllegalArgumentException("인증한 Email이 없습니다");
              }
              if (!verifiedEmail.equals(email)) {
                  throw new IllegalArgumentException("인증되지 않은 Email 입니다.");
              }
      • redisUtil 안의 getEmail 안에는 key : success, value : email 있다
        • success 넣어주면 email이 짝꿍이다
        • email : 인증된 이메일
        • success 라는 단어는 임의로 넣어준 것이고 이해하기 더 쉬운 단어가 있으면 수정하기!
      • redisUtil.getEmail("success")를 verifiedEmail에 담아주고 if문으로 설정

로그아웃…

profile
공부하자개발하자으쌰으쌰

0개의 댓글