카카오톡으로 로그인
function openKakao(){
setCookie();
location.href = “${ctx }/oauth2/authorization/kakao”;
}
//카카오 로그인
private OAuth2User kakao(OAuth2UserRequest userRequest) {
OAuth2User oAuth2User = super.loadUser(userRequest);
ModelAndView mv = new ModelAndView();
log.info("======================카카오 로그인 =====================");
log.info("************** 사용자 정보 *************");
log.info("Name : {} ", oAuth2User.getName());
log.info("Attributes : {} " , oAuth2User.getAttributes());
log.info("auth :: {} " , oAuth2User.getAuthorities());
log.info("카카오 로그인, oAuth2User ::::::::: {} " + oAuth2User);
Map<String, Object> map = oAuth2User.getAttributes();
log.info("카카오 맵 :: {} " + map);
//key들 꺼내기
Iterator<String> keys = map.keySet().iterator();
while(keys.hasNext()) { //열거한 후 다음게 있냐고 물어봄
String key = keys.next();
log.info("카카오 KEY ==>> {} " , key);
}
log.info("ClassName : {} " , oAuth2User.getAttribute("properties").getClass());
Map<String, String> lm = oAuth2User.getAttribute("properties");
Map<String, Object> ks = oAuth2User.getAttribute("kakao_account");
log.info("======== (USERSOCIALSERVICE) lm :::: {} " + lm);
log.info("======== (USERSOCIALSERVICE) ks :::: {} " + ks);
log.info("======== (USERSOCIALSERVICE) oAuth2User.getAttributes() ::: {} " + oAuth2User.getAttributes());
String social = userRequest.getClientRegistration().getRegistrationId();
log.info("social ::: {} " + social);
UserVO userVO = new UserVO();
String userId = userMapper.getUserId(oAuth2User.getName());
String kakaoPhone = (String)ks.get("phone_number");
//특수문자 및 공백 제거 ex) +82 10-1234-5678
String newKakaoPhone = kakaoPhone.replaceAll("[^0-9]", "");
//앞에 82를 0으로 치환
String realKakaoPhone = newKakaoPhone.replaceFirst("^82", "0");
userVO.setUserId(userId);
userVO.setKakaoId(oAuth2User.getName());
//이미 아이디가 있는지 확인
log.info("count if문 ");
userVO.setKakaoEmail(ks.get("email").toString());
userVO.setKakaoHp(realKakaoPhone);
userVO.setKakaoNm(ks.get("name").toString());
userVO.setUserAthr("01");
userVO.setAttributes(oAuth2User.getAttributes());
userVO.setSocial(social);
log.info("======== (USERSOCIALSERVICE) set후 oAuth2User.getAttributes() ::: {} " + oAuth2User.getAttributes());
Map<String, Object> check = new HashMap<String, Object>();
check.put("hp", userVO.getKakaoHp());
log.info("check :: {} " + check);
int checkBlockYn = userMapper.checkBlockYnBySocial(check);
log.info("checkBlockYn :: {} " + checkBlockYn);
if(checkBlockYn > 0) {
throw new OAuth2AuthenticationException(new OAuth2Error("user_blocked", "User is blocked", "로그인이 차단되었습니다."));
}
log.info("카카오 전화번호 ::::::: {} " + userVO.getKakaoHp());
//기존 우리 사이트 회원인지
int checkUser = userMapper.checkAlreadyUserByKakao(userVO);
//기존 카카오 회원인지
int count = userMapper.checkExistingUserByKakao(userVO);
log.info("이미 회원임 ???? count ::: {} " + count);
if(checkUser == 1) {
log.info("=============(UserSocialService) 기존에 우리 사이트 가입한 적 있음 (일반 OR 네이버) ================");
if(count == 1) {
log.info("=============(UserSocialService) 기존에 카카오로 가입한 적 있음 ================");
userMapper.updateKakaoInfo(userVO);
}else {
log.info("================= (UserSocialService) 기존에 카카오로 가입한 적 없음 ===================");
userMapper.updateKakaoInfo(userVO);
}
}else {
log.info("===============(UserSocialService) 우리 사이트 가입한 적 없음 (일반 OR 네이버) ===============");
userMapper.signUpKakao(userVO);
}
log.info("========== UserSocialService userVO ::: {} " + userVO);
userVO = userMapper.getKakaoLogin(userVO.getKakaoId());
return userVO;
}
@Component
@Slf4j
public class SocialLoginSuccess extends SimpleUrlAuthenticationSuccessHandler{
@Autowired
private UserMapper userMapper;
@Autowired
private KakaoService kakaoService;
@Autowired
private NaverService naverService;
//소셜로그인 성공시
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
log.info("============= 소셜 로그인 성공 ==========");
log.info("ididididi :: {} " , authentication.getName());
log.info("소셜 현재 정보 :: {} " , authentication.getPrincipal());
log.info("소셜로그인 세션 ::: {} " , request.getSession());
log.info("소셜로그인 세션 ::: {} " , request.getRequestedSessionId());
log.info("소셜로그인 :::: request.authenticate(response) {} " + request.authenticate(response));
// log.info("소셜 로그인 Success핸들러 진짜 AccessToken :::: {} " + request.getParameter(“code”));
String authCode = request.getParameter("code");
String naverState = request.getParameter("state");
request.getSession().setAttribute("userId", authentication.getName());
// userMapper.insertKakaoAccessToken(map);
UserVO userVO = new UserVO();
userVO.setUserId(authentication.getName());
userVO = userMapper.getMyPage(userVO);
log.info("소셜로그인 성공시 userVO :: {} " + userVO.getSocial());
if(userVO.getSocial().equals("kakao")) {
log.info("발급받은 카카오 인가코드 ::: {} " + request.getParameter("code"));
String kakako_accessToken = kakaoService.getAccessToken(authCode);
log.info("카카오 로그인 성공시 accessToken :: {} " + kakako_accessToken);
}else if(userVO.getSocial().equals("naver")) {
log.info("발급받은 네이버 인가코드 ::: {} " + request.getParameter("code"));
String naver_accessToken;
try {
log.info("네이버 트라이");
naver_accessToken = naverService.getAccessToken(authCode, naverState);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// log.info("네이버 로그인 성공시 accessToken :: {} " + naver_accessToken);
}
request.getSession().setAttribute("user", userVO);
// request.getSession().setAttribute(“kakaoAT”, request.getParameter(“code”));
response.sendRedirect("/hp/user/main");
}
잘못된 부분이 있을까요