팀프로젝트/SpringBoot

스프링부트 팀플) 20240331 여러 방식의 로그인의 일원화

일일일코_장민기 2024. 3. 31. 15:58
728x90

 

범하게 사이트 내에서 가입한 아이디이다.

구글 연동 / 네이버 연동 / 카카오 연동 여부가 0으로 표시되고 있는데,
이는 해당 외부API와 연동되지 않았다는 뜻이다.

해당 아이디로 네이버 로그인을 해보겠다.

 

연동 완료
카카오도 연동해보겠다.
같은 닉네임이 출력된다.
카카오/네이버 둘 다 연동되었다.
이번엔 새롭게 구글로 로그인
닉네임 입력칸이 뜨며 새롭게 가입된다.
구글만 연동된 새로운 아이디가 생성되었다.

 

 

 

사실 엄청난 처리를 한 것이 아니라서 코드 상 작업도 별로 없었다.
그러니 기존의 카카오 로그인 코드에서 변경된 부분만 올린다.

//아이디

String jsonString2 = objectMapper.writeValueAsString(map.get("kakao_account"));

JsonNode jsonNode2 = objectMapper.readTree(jsonString2);

String id = jsonNode2.get("email").asText();

 

//이미 가입한 사람인지 확인

MemberDTO check = serv.selectOneAPIMember(id);

 

//기가입자이지만, 카카오 연동이 안된 사람을 연동

if(check != null && check.getKakaoConnected() == 0) {

serv.updateAPIMemberKakaoConnected(check.getUserId());

}

 

ModelAndView mav = new ModelAndView();

 

//미가입자일 경우, 자동 가입

if(check == null) {

 

//비밀번호

String pw = sc.encrypt("Kakao"+dbc.getNum(16));

 

//닉네임

String nickname = oac.randomNickname();

 

MemberDTO dto = new MemberDTO();

dto.setUserId(id);

dto.setUserPw(pw);

dto.setNickname(nickname);

dto.setKakaoConnected(1);

 

//회원가입

serv.insertAPIMember(dto);

 

//닉네임 변경하는 화면으로 이동

MemberDTO nDTO = serv.selectOneAPIMember(dto.getUserId());

session.setAttribute("loginUser", nDTO);

mav.addObject("dto", nDTO);

mav.setViewName("member/Login/APILogin");

return mav;

 

//가입자일 경우, 메인으로 이동

} else {

session.setAttribute("loginUser", check);

mav.setViewName("redirect:/");

return mav;

}

}

솔직히 SSO 토큰으로 처리해야 하는 작업인데 지금 어제 오늘 하루종일 작업해서 정신이 없다...
완전히 새로운 내용을 공부해서 작업해야 하는 것이기도 하고...
자소서니 기술면접이니 준비할 것도 많다보니까 일단 이정도만 정리

아마 다음 작업은 일단은 가벼운 작업 여러 개가 될 것 같다.
1. 아이디/비밀번호 찾기, 회원가입 1단계 기회원 여부 판별에서
구글/네이버/카카오 로그인 가입자면 그쪽으로 안내하기

2. 비밀번호 찾기도 동일

3. 현재 구글로그인 등 보안코드들은 github에 올라가지 못함
-> Application.properties가 아닌 다른 properties에 넣고,
gitIgnore를 통해 github 사용에 지장가지 않도록 만들기


그 뒤로는 이하와 같은 작업을 예정하고 있다
1. SSO
2. JWT 토큰을 통한 로그인 / 동일 계정 확인
3. 스프링 시큐리티 3.0 암호화