21.04.29 JSPCommunity 프로젝트(카카오 로그인 기능 추가)

2021. 4. 29. 22:36JAVA/JSP Community 사이트 프로젝트

## UserMemberController.java

// 카카오 로그인
	public String doKakaoLogin(HttpServletRequest request, HttpServletResponse response) {
		// 1.인증코드 받기
		String code = request.getParameter("code");
		// 2.인증된 코드로 사용자토큰 받기
		Map<String, Object> tokensInfo = kakaoService.getAccessToken(code);
		String access_Token = (String) tokensInfo.get("access_Token");
		// 3.사용자토큰으로 로그인한 유저의 정보 받아오기
		HashMap<String, Object> userInfo = kakaoService.getUserInfo(access_Token);

		String loginProviderTypeCode = "kakaoRest";
		String onLoginProviderMemberId = (String) userInfo.get("kakaoId");

		// DB에서 카카오 로그인한 회원의 정보 가져오기(조회하기)
		Member member = memberService.getMemberByOnLoginProviderMemberId(loginProviderTypeCode,
				onLoginProviderMemberId);

		Map<String, Object> kakaoUser = new HashMap<>();
		kakaoUser.put("nickname", userInfo.get("nickname"));
		if (!userInfo.get("email").equals("이메일 동의 항목에 사용자 동의 필요")) {
			kakaoUser.put("email", userInfo.get("email"));
		}
		kakaoUser.put("loginProviderTypeCode", loginProviderTypeCode);
		kakaoUser.put("onLoginProviderMemberId", onLoginProviderMemberId);

		int memberId = 0;
		// 만약, 기존 회원정보 있으면
		if (member != null) {
			// 카카오 유저정보로 기존 회원정보 업데이트
			memberId = member.getId();
			kakaoUser.put("id", memberId);
			kakaoUser.put("nickname", member.getNickname());
			memberService.modify(kakaoUser);
		} else {
			// 만약, 기존 회원정보 없으면 카카오계정으로 회원가입 실시
			memberId = memberService.joinByKakao(kakaoUser);
		}

		HttpSession session = request.getSession();
		session.setAttribute("loginedMemberId", memberId);

		// 로그인 알림창 보여주고 화면으로 이동
		String replaceUrl = "../home/main";

		if (Util.isEmpty(request.getParameter("nextUrlAfterLogin")) == false) {
			replaceUrl = request.getParameter("nextUrlAfterLogin");
		}

		if (Util.isEmpty(request.getParameter("beforeUrl")) == false) {
			replaceUrl = request.getParameter("beforeUrl");
		}
		
		String nickname = (String) userInfo.get("nickname");
		if(member != null) {
			nickname = member.getNickname();
		}

		return msgAndReplaceUrl(request, nickname + ", 님 반갑습니다.", replaceUrl);
	}