<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, width=device-width" />
<title>Custom Login Demo - Kakao JavaScript SDK</title>
<script src="//developers.kakao.com/sdk/js/kakao.min.js"></script>
<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
<script>
$(document).ready(function(){
var check = 0;
Kakao.init('35c746c7c031b1c1d304d8dcde651b9f');
/* var refreshToken = Kakao.Auth.getRefreshToken(); */
function createKakaotalkLoginForm(){
$("#kakao-logged-group .kakao-logout-btn,#kakao-logged-group .kakao-login-btn").remove();
var loginBtn = $("<img/>",{"class":"kakao-login-btn","src":"//mud-kage.kakao.com/14/dn/btqbjxsO6vP/KPiGpdnsubSq3a0PHEGUK1/o.jpg"});
loginBtn.click(function(){
Kakao.Auth.loginForm({
// 세션이 종료된 이후에도 토큰을 유지.
persistAccessToken: true,
// 세션이 종료된 이후에도 refresh토큰을 유지.
persistRefreshToken: true,
success: function(authObj) {
// 토큰 저장 ajax
var acs_token = authObj.access_token;
var rfs_token = authObj.refresh_token;
/*
$.ajax({
type:"GET",
url:"/loginCheck/"+acs_token+"/"+rfs_token,
dataType: "text",
headers:{
"Content-Type" : "application/json; charset=utf-8",
"X-HTTP-Method-Override" : "POST"
},
data:JSON.stringify({
access_token: acs_token,
refresh_token: rfs_token
}),
success:function(result){
console.log(result);
console.log("세션전닰ㄱ");
},
error:function(data){
console.log(data);
console.log("세션전달 실패");
}
});
*/
// 토큰 저장
check = 1;
createKakaotalkLogout();
getKakaotalkUserProfile();
/* Kakao.Auth.setAccessToken(accessTokenFromServer); */
},
fail: function(err) {
console.log(err);
}
});
});
$("#kakao-logged-group").prepend(loginBtn)
}
function getKakaotalkUserProfile(){
Kakao.API.request({
url: '/v1/user/me',
success: function(res) {
console.log(res);
$.ajax({
type:"POST",
url:"/memberJoinOK",
headers:{
"Content-Type" : "application/json; charset=utf-8",
"X-HTTP-Method-Override" : "POST"
},
dataType: "text",
data: JSON.stringify({
kakaoid : res.id,
kakaoemail : res.kaccount_email,
kakaonickname : res.properties.nickname
}),
success:function(result){
console.log(result);
console.log("로그인");
},
error:function(data){
console.log(data);
console.log("로그인안됨");
}
});
$("#kakao-profile").append(res.properties.nickname);
},
fail: function(error) {
console.log(error);
}
});
}
//로그아웃 시작
function createKakaotalkLogout(){
$("#kakao-logged-group .kakao-logout-btn,#kakao-logged-group .kakao-login-btn").remove();
var logoutBtn = $("<img/>",{"class":"kakao-login-btn","src":"/resources/kakaologout.png"});
logoutBtn.click(function(){
Kakao.Auth.logout(function(data){
});
createKakaotalkLoginForm();
$("#kakao-profile").text("");
});
$("#kakao-logged-group2").prepend(logoutBtn);
}
//로그아웃 끝
if((Kakao.Auth.getRefreshToken()!=undefined)&&(Kakao.Auth.getRefreshToken().replace(/ /gi,"")!="")){
createKakaotalkLogout();
getKakaotalkUserProfile();
/* createKakaotalkLoginForm(); */
}else{
createKakaotalkLoginForm();
}
});// 페이지 끝
</script>
</head>
<body>
<div id="kakao-logged-group"></div>
<div id="kakao-logged-group2"></div>
<div id="kakao-profile"></div>
</body>
</html>
카카오톡 로그인 할 수 있게 만들었구요 여기서 로그인 버튼을 누르면 로그아웃 버튼이 생기고 로그인 버튼이 사라집니다.
package com.kh.pickpl.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.kh.pickpl.member.service.MemberService;
import com.kh.pickpl.member.vo.MemberVO;
/**
* Handles requests for the application home page.
*/
@Controller
@RestController
public class MemberController {
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
@Autowired(required = true)
@Qualifier("memberServiceImplXML")
MemberService memberService;
// setattribute로 세션을 저장 해야한다.
@RequestMapping(value = "/memberJoinOK", method = RequestMethod.POST)
public ResponseEntity<String> insert(@RequestBody MemberVO memberVO, Model model) {
logger.info("insert POST ..." + memberVO.toString());
ResponseEntity<String> responseEntity = null;
try {
if(memberService.memberCheck(memberVO.getKakaoid()) >= 1) {
responseEntity = new ResponseEntity<>("Success", HttpStatus.OK);
} else if(memberService.memberCheck(memberVO.getKakaoid()) == 0){
memberService.memberInsert(memberVO);
responseEntity = new ResponseEntity<>("Success", HttpStatus.OK);
}
} catch (Exception e) {
responseEntity = new ResponseEntity<>("Fail", HttpStatus.BAD_REQUEST);
}
model.addAttribute("zzz", memberVO.getKakaoid());
return responseEntity;
}
/* @RequestMapping(value = "/loginCheck", method = RequestMethod.POST)
public ResponseEntity<Void> check(@RequestBody String token, HttpSession session) {
ResponseEntity<Void> responseEntity = null;
logger.info("insert POST ..." );
JSONParser jsonParser = new JSONParser();
try {
JSONObject jsonObject = (JSONObject)jsonParser.parse(token);
System.out.println(jsonObject.get("access_token"));
} catch (ParseException e) {
System.out.println("응안돼.");
e.printStackTrace();
}
return responseEntity;
}*/
/* @RequestMapping(value = "/loginCheck/{acs_token}/{rfs_token}")
public ResponseEntity<String> check(@PathVariable String acs_token, @PathVariable String rfs_token, HttpSession session) {
ResponseEntity<String> responseEntity = null;
String result = acs_token + " : "+ rfs_token;
session.setAttribute("token", acs_token);
session.setAttribute("token2", rfs_token);
try {
responseEntity = new ResponseEntity<>(result, HttpStatus.OK);
}
catch (Exception e) {
responseEntity = new ResponseEntity<>(result, HttpStatus.BAD_REQUEST);
}
return responseEntity;
}*/
}
컨트롤러 부분인데 이게 이제 로그인을 하고 새로고침을하면 로그인이 유지가 되지않고 처음부터 다시 로그인을 하여야 합니다.
새로고침을 하더라도 세션을 유지하고 싶은데 되질않아 골치네요 ㅠㅠ도움을 부탁 드립니다. 제가 잘 몰라서 자세한 답변 부탁드려요 ㅠㅠㅠㅠㅠㅠ