비밀번호 매칭 성공!!
@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로 가져오면 된다고 하셨다..
그 방법을 몰라서 쿼리를 직접 작성한 거 였는데.. 역시 배우고 봐야해 ㅠㅠ
오늘 하루 고민을 바로 해결해 주시다니... 갓갓!!
이 부분이 오늘의 최고 하이라이트 부분 이었다... ㅠㅠ
.matches 어떻게 사용하는지 찾아보고... db에 암호화되서 저장되있는 pw 가져올라고 쿼리까지 직접 작성했지만... 저렇게 간단하게 가져올 수 있는 것이었따..
Optional<User> found = userRepository.findByNickname(nickname);
String dbPw = found.get().getPassword();
갓...그저 갓...
found로 닉네임이 일치하는 결과들을 가져오고 그걸 다시 .get().getPassword로
비밀번호 부분만 가져온다.....
그리고 matches로 내가 입력한 비밀번호(pw)와 DB에 암호화되어 저장된 비밀번호(dbPw)를 비교..!!!
값은 boolean 타입으로 같으면 true 다르면 false를 반환!!
맞는 비밀번호를 치면 오른쪽 콘솔창처럼 true 가 반환되고 비밀번호가 틀리면
비밀번호가 틀렸다고 알려주고 콘솔창에 false가 뜨는 걸 확인할 수 있다!!
기본 로그인과 카카오 로그인이 있는데 아직 카카오 로그인을 할 때 아이디와 닉네임이 중복되는지 확인 하는 걸 만들지 못했고... 만약 닉네임이 중복된다면 닉네임을 바꾸고 가입이 되어야 하는데... 그부분을 해결하면 좋을 것 같다.
왜냐면 지금 코드는 닉네임
을 가지고 패스워드를 가져오기 때문..!! 이걸 DB의 ID나 UserID로 바꿔서 패스워드를 가져오면 되기야 하겠지만 그러면 서비스에서 닉네임 중복을 만든 의미가...
조금은 없지 않을까..??? 이 부분은 팀원들과 상의해봐야겠다!!
이제 유저별 페이지를 확인하는 부분과 프로필 수정 후 업데이트 하는 부분을 만들어 내면 내가 맡은 기능은 거의 완료하는 것이다!! 하지만 오늘 발제로 JWT 로그인을 구현해야하는 것을 알아 버려서....
아주 오래 걸릴 것 같다 ㅠㅠㅠ 화이팅!! 가보자고~~~
나는 왜 삽질만 하는가 -저자 HSH