Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- HTML
- MS949
- TIL
- JSESSIONID
- 김영한
- 객체지향
- 독서
- java.sql.SQLException
- mysql
- API
- org.h2.jdbc.JdbcSQLSyntaxErrorException
- .decode('utf-8')
- 자바스프링
- 에러해결법
- 엔터키 이벤트
- 알고리즘
- Code
- WIL
- 인텔리제이
- 인프런
- jwt
- 프로그래머스
- java
- 자바
- 스프링시큐리티
- 스파르타코딩클럽
- ServerSelectionTimeoutError
- PUT과 PATCH
- unmappable character for encoding MS949
- 항해99
Archives
- Today
- Total
고을마을 : 나의 코딩 이야기
카카오 로그인 유저가 일반로그인을 했을때 나타나는 오류 본문
뜬금없이 우리 조가 만든 서비스에
카카오로 회원가입한 아이디와 비밀번호를 일반로그인에 기입해 send를 눌러봤다.
근데 비밀번호가 틀렸다는 오류가 반환되는게 아닌가?
이유는
첫 소셜로그인일 경우 DB에 저장될때
private void registerKakaoUser(KakaoUserInfo kakaoUserInfo) {
String password = UUID.randomUUID().toString();
String encodedPassword = passwordEncoder.encode(password);
System.out.println("registerKakaoUser");
System.out.println(kakaoUserInfo.getKakaoMemberId());
User kakaoUser = User.builder()
.kakaoId(kakaoUserInfo.getKakaoId())
.username(kakaoUserInfo.getKakaoMemberId())
.password(encodedPassword)
.nickname("default")
.role(UserRoleEnum.USER)
.build();
userRepository.save(kakaoUser);
패스워드를 임의로 uuid 랜덤값으로 넣어주기 때문에 일반로그인으로 카카오 아이디와 비밀번호를 입력하면
비밀번호가 오류라는 validator에 걸려서 400에러를 반환하는 것이었다.
따라서,
@Transactional
public Map<String, Object> login(LoginDto loginDto) {
UserValidator.validateUsernameEmpty(loginDto);
UserValidator.validatePasswordEmpty(loginDto);
User user = userRepository.findByUsername(loginDto.getUsername()).orElseThrow(
() -> new CustomException(ErrorCode.LOGIN_NOT_FOUNT_MEMBERID)
);
if (!passwordEncoder.matches(loginDto.getPassword(), user.getPassword())) {
if (user.getKakaoId()!=null){
throw new CustomException(ErrorCode.LOGIN_NOT_KAKAOUSER);
}else {
throw new CustomException(ErrorCode.LOGIN_PASSWORD_NOT_MATCH);
}
}
Long userId = user.getId();
TokenDto tokenDto = jwtTokenProvider.createToken(user);
RefreshToken refreshToken = new RefreshToken(loginDto.getUsername(), tokenDto.getRefreshToken());
refreshTokenRepository.save(refreshToken);
Map<String, Object> data = new HashMap<>();
data.put("userId", userId);
data.put("token", tokenDto);
return data;
카카오 로그인 회원들이 갖고 있는 고유 long 값 kakaoId를 활용하여
kakaoId가 null이 아닐때!
카카오 USER는 카카오 로그인을 해주세요.라는 CustomException을 반환되도록 구현해서 유저들의 카카오로그인을 유도했다.
if (!passwordEncoder.matches(loginDto.getPassword(), user.getPassword())) {
if (user.getKakaoId()!=null){
throw new CustomException(ErrorCode.LOGIN_NOT_KAKAOUSER);
'항해99 7기 > TIL(Today I Learned)' 카테고리의 다른 글
항해99 39일차 TIL[자기반성의 시간] (0) | 2022.06.17 |
---|---|
항해99 38일차 TIL[CORS, JSESSIONID] (0) | 2022.06.16 |
항해99 27일차 TIL[@ManyToOne, @JoinColumn, .stream().forEach() ] (0) | 2022.06.08 |
API란? (0) | 2022.06.04 |
항해99 24일차 TIL[@Transactional, 페이징 및 정렬 설계] (0) | 2022.06.04 |