내일배움캠프 47일차

Drumj·2022년 6월 24일
0

내일배움캠프

목록 보기
47/80

<오늘의 학습>

비밀번호 매칭 성공!!

뻘 짓..

@Qurey("select password from User where nickname = :nickname")
Optional<User> findByPassword(@Param("nickname") String nickname)

UserRepository에 이거 작성하고...

Service 파일에 userRepository.findByPassword(nickname) 해서 이거를 또
String.valueOf()로 감싸고 오만짓 다하면서 구글링 했는데;;

튜터님과 팀장님의 도움으로 그냥 2분만에 해결;;;

내가 원한 그림은

이렇게 패스워드 부분을 값으로 들고 와서
passwordEncoder.matches(pw, dbPw); 스프링 시큐리티에서 지원해주는 .matches() 로 비밀번호를
비교해보는 것이었다... ㅎㅎ

하지만


해결방법

튜터님 : 어처피 저렇게 하나만 가져올거면 전체 다 가져와도 되겠는데요?? 이 쿼리(내가 작성한 쿼리) 를 굳이 쓸 필요도 없어요. 낭비인 것 같아요
팀장님 : 네네. 그냥 닉네임으로 찾아서 패스워드 부분을 가져오면 될 것 같아요!

엥...????? 아...!!! 그렇구나! 그런거였구나!!!!
findByNickname을 그대로 쓰고 password를 getPassword로 가져오면 된다고 하셨다..

그 방법을 몰라서 쿼리를 직접 작성한 거 였는데.. 역시 배우고 봐야해 ㅠㅠ
오늘 하루 고민을 바로 해결해 주시다니... 갓갓!!


해결

  • ajax
  • controller
  • service

이 부분이 오늘의 최고 하이라이트 부분 이었다... ㅠㅠ
.matches 어떻게 사용하는지 찾아보고... db에 암호화되서 저장되있는 pw 가져올라고 쿼리까지 직접 작성했지만... 저렇게 간단하게 가져올 수 있는 것이었따..

Optional<User> found = userRepository.findByNickname(nickname);
String dbPw = found.get().getPassword();

갓...그저 갓...
found로 닉네임이 일치하는 결과들을 가져오고 그걸 다시 .get().getPassword로
비밀번호 부분만 가져온다.....
그리고 matches로 내가 입력한 비밀번호(pw)와 DB에 암호화되어 저장된 비밀번호(dbPw)를 비교..!!!
값은 boolean 타입으로 같으면 true 다르면 false를 반환!!

  • client

맞는 비밀번호를 치면 오른쪽 콘솔창처럼 true 가 반환되고 비밀번호가 틀리면
비밀번호가 틀렸다고 알려주고 콘솔창에 false가 뜨는 걸 확인할 수 있다!!


보강할 점

기본 로그인과 카카오 로그인이 있는데 아직 카카오 로그인을 할 때 아이디와 닉네임이 중복되는지 확인 하는 걸 만들지 못했고... 만약 닉네임이 중복된다면 닉네임을 바꾸고 가입이 되어야 하는데... 그부분을 해결하면 좋을 것 같다.
왜냐면 지금 코드는 닉네임을 가지고 패스워드를 가져오기 때문..!! 이걸 DB의 ID나 UserID로 바꿔서 패스워드를 가져오면 되기야 하겠지만 그러면 서비스에서 닉네임 중복을 만든 의미가...
조금은 없지 않을까..??? 이 부분은 팀원들과 상의해봐야겠다!!


나아가야 할 부분

이제 유저별 페이지를 확인하는 부분과 프로필 수정 후 업데이트 하는 부분을 만들어 내면 내가 맡은 기능은 거의 완료하는 것이다!! 하지만 오늘 발제로 JWT 로그인을 구현해야하는 것을 알아 버려서....
아주 오래 걸릴 것 같다 ㅠㅠㅠ 화이팅!! 가보자고~~~

--오늘의 한 줄--

나는 왜 삽질만 하는가 -저자 HSH

0개의 댓글