diff --git a/i_entrance/logoutPost.php b/i_entrance/logoutPost.php index d7bc0d38..1360d2f7 100644 --- a/i_entrance/logoutPost.php +++ b/i_entrance/logoutPost.php @@ -7,10 +7,9 @@ require_once(ROOT.'/f_config/SESSION.php'); $SESSION->logout(); +unset($_SESSION['access_token']); +setcookie("hello", "", time()-3600); -$response['result'] = 'SUCCESS'; - -sleep(1); -echo json_encode($response); - - +echo json_encode([ + 'result'=>'SUCCESS' +]); \ No newline at end of file diff --git a/i_login/j_login.php b/i_login/j_login.php index 9d2c3c79..2d778116 100644 --- a/i_login/j_login.php +++ b/i_login/j_login.php @@ -2,6 +2,7 @@ require_once('_common.php'); require_once(ROOT.'/f_func/class._Session.php'); require_once(ROOT.'/f_func/class._String.php'); +require(ROOT.'/f_func/class._Time.php'); require_once(ROOT.'/f_config/DB.php'); use utilphp\util as util; @@ -21,8 +22,16 @@ if(!$username || !$password){ ]); } +$canLogin = getRootDB()->queryFirstField('SELECT `LOGIN` FROM `SYSTEM` WHERE `NO` = 1'); +if($canLogin != 'Y'){ + returnJson([ + 'result'=>false, + 'reason'=>'현재는 로그인이 금지되어있습니다!' + ]); +} + $userInfo = getRootDB()->queryFirstRow( - 'SELECT `no`, `id`, `name`, `grade` '. + 'SELECT `no`, `id`, `name`, `grade`, `delete_after` '. 'from member where id=%s_username AND '. 'pw=sha2(concat(salt, %s_password, salt), 512)',[ 'username'=>$username, @@ -36,6 +45,24 @@ if(!$userInfo){ ]); } +$nowDate = _Time::DatetimeNow(); +if($userInfo['delete_after']){ + if($userInfo['delete_after'] < $nowDate){ + getRootDB()->delete('member', 'no=%i', $userInfo['no']); + returnJson([ + 'result'=>false, + 'reason'=>"기간 만기로 삭제되었습니다. 재 가입을 시도해주세요." + ]); + } + else{ + returnJson([ + 'result'=>false, + 'reason'=>"삭제 요청된 계정입니다.[{$userInfo['delete_after']}]" + ]); + } + +} + $SESSION->login($userInfo['no'], $userInfo['id'], $userInfo['grade']); returnJson([ 'result'=>true, diff --git a/tmp_kakao/index.php b/tmp_kakao/index.php index be91de3f..e0fb31b6 100644 --- a/tmp_kakao/index.php +++ b/tmp_kakao/index.php @@ -7,9 +7,86 @@ require('conf.php'); 카카오 로그인하기 + + - +
+
+ 비밀번호 찾기
+ + \ No newline at end of file diff --git a/tmp_kakao/j_change_pw.php b/tmp_kakao/j_change_pw.php new file mode 100644 index 00000000..566dcdbc --- /dev/null +++ b/tmp_kakao/j_change_pw.php @@ -0,0 +1,6 @@ +'로그인 토큰 에러. 다시 카카오로그인을 수행해주세요.' ]); } -if($refresh_token_expires < $nowDate){ +if($expires < $nowDate && (!$refresh_token || ($refresh_token_expires < $nowDate))){ + unset($_SESSION['access_token']); returnJson([ 'result'=>false, 'reason'=>'로그인 토큰 만료.'.$refresh_token_expires.' 다시 카카오로그인을 수행해주세요.' @@ -85,6 +86,7 @@ $restAPI = new Kakao_REST_API_Helper($access_token); if($expires < $nowDate){ $result = $restAPI->refresh_access_token($refresh_token); if(!isset($refresh_token)){ + unset($_SESSION['access_token']); returnJson([ 'result'=>false, 'reason'=>'카카오 로그인 과정 중 추가 갱신 절차를 실패했습니다' @@ -111,6 +113,15 @@ if(!$kakaoID && util::array_get($signupResult['msg'])!='already registered'){ } $me = $restAPI->meWithEmail(); +$me['code'] = util::array_get($me['code'], 0); +if ($me['code']< 0) { + $restAPI->unlink(); + returnJson([ + 'result'=>false, + 'reason'=>'카카오로그인이 정상적으로 수행되지 않았습니다.' + ]); +} + if(!util::array_get($me['kaccount_email_verified'],false)){ $restAPI->unlink(); returnJson([ @@ -120,6 +131,7 @@ if(!util::array_get($me['kaccount_email_verified'],false)){ } $email = $me['kaccount_email']; +$_SESSION['kaccount_email'] = $email; $emailChk = checkEmailDup($email); if($emailChk !== true){ $restAPI->unlink(); @@ -130,8 +142,6 @@ if($emailChk !== true){ } //모든 절차 종료. 등록. - - getRootDB()->insert('auth_kakao',[ 'id'=>$kakaoID, 'access_token'=>$access_token, diff --git a/tmp_kakao/j_login_oauth.php b/tmp_kakao/j_login_oauth.php new file mode 100644 index 00000000..cc9f8fed --- /dev/null +++ b/tmp_kakao/j_login_oauth.php @@ -0,0 +1,130 @@ +isLoggedIn()){ + $SESSION->logout(); +} + +$canLogin = getRootDB()->queryFirstField('SELECT `LOGIN` FROM `SYSTEM` WHERE `NO` = 1'); +if($canLogin != 'Y'){ + returnJson([ + 'result'=>false, + 'reason'=>'현재는 로그인이 금지되어있습니다!', + 'noRetry'=>true + ]); +} + +$nowDate = _Time::DatetimeNow(); + +$access_token = util::array_get($_SESSION['access_token']); +$expires = util::array_get($_SESSION['expires']); +$refresh_token = util::array_get($_SESSION['refresh_token']); +$refresh_token_expires = util::array_get($_SESSION['refresh_token_expires']); +$email = util::array_get($_SESSION['kaccount_email']); + + +if(!$access_token || !$expires){ + returnJson([ + 'result'=>false, + 'reason'=>'카카오로그인이 이루어지지 않았습니다.' + ]); +} + +//TODO: join과 login의 동작이 비슷하다. helper class로 묶자. +$restAPI = new Kakao_REST_API_Helper($access_token); + +if($expires < $nowDate && (!$refresh_token || ($refresh_token_expires < $nowDate))){ + returnJson([ + 'result'=>false, + 'reason'=>'로그인 토큰 만료.'.$refresh_token_expires.' 다시 카카오로그인을 수행해주세요.' + ]); +} + +if($expires < $nowDate){ + unset($_SESSION['kaccount_email']); + $email = null; + + $result = $restAPI->refresh_access_token($refresh_token); + if(!isset($refresh_token)){ + returnJson([ + 'result'=>false, + 'reason'=>'카카오 로그인 과정 중 추가 갱신 절차를 실패했습니다' + ]); + } + + $access_token = $result['access_token']; + $expires = _Time::DatetimeFromNowSecond($nowDate, $result['expires_in']); + if(isset($result['refresh_token'])){ + $refresh_token = util::array_get($result['refresh_token']); + $refresh_token_expires = _Time::DatetimeFromNowSecond($nowDate, $result['refresh_token_expires_in']); + } +} + + +if(!$email){ + $me = $restAPI->meWithEmail(); + $me['code'] = util::array_get($me['code'], 0); + if ($me['code']< 0) { + returnJson([ + 'result'=>false, + 'reason'=>'카카오로그인이 정상적으로 수행되지 않았습니다.' + ]); + } + + if(!util::array_get($me['kaccount_email_verified'],false)){ + $restAPI->unlink(); + returnJson([ + 'result'=>false, + 'reason'=>'카카오 계정 이메일이 아직 인증되지 않았습니다' + ]); + } + + $email = $me['kaccount_email']; + $_SESSION['kaccount_email'] = $email; +} + + +$userInfo = getRootDB()->queryFirstRow( + 'SELECT `no`, `id`, `name`, `grade`, `delete_after` from member where email=%s',$email); + +if(!$userInfo){ + $restAPI->unlink(); + unset($_SESSION['access_token']); + returnJson([ + 'result'=>false, + 'reason'=>'카카오로그인에 해당하는 계정이 없습니다. 재 가입을 시도해주세요.' + ]); +} + +if($userInfo['delete_after']){ + if($userInfo['delete_after'] < $nowDate){ + $restAPI->unlink(); + unset($_SESSION['access_token']); + getRootDB()->delete('member', 'no=%i', $userInfo['no']); + returnJson([ + 'result'=>false, + 'reason'=>"기간 만기로 삭제되었습니다. 재 가입을 시도해주세요." + ]); + } + else{ + $restAPI->unlink(); + unset($_SESSION['access_token']); + returnJson([ + 'result'=>false, + 'reason'=>"삭제 요청된 계정입니다.[{$userInfo['delete_after']}]" + ]); + } + +} + +$SESSION->login($userInfo['no'], $userInfo['id'], $userInfo['grade']); +returnJson([ + 'result'=>true, + 'reason'=>'로그인 되었습니다.' +]); \ No newline at end of file diff --git a/tmp_kakao/kakao.php b/tmp_kakao/kakao.php index 76b42044..e822930e 100644 --- a/tmp_kakao/kakao.php +++ b/tmp_kakao/kakao.php @@ -39,6 +39,7 @@ class Talk_Path { public static $TALK_PROFILE= "/v1/api/talk/profile"; public static $TALK_TO_ME = "/v2/api/talk/memo/send"; + public static $TALK_TO_ME_DEFAULT = "/v2/api/talk/memo/default/send"; } class Push_Notification_Path @@ -230,6 +231,10 @@ class Kakao_REST_API_Helper return $this->request(Talk_Path::$TALK_PROFILE); } + public function talk_to_me_default($req){ + return $this->request(TalkPath::$TALK_TO_ME_DEFAULT, json_encode($req), 'POST'); + } + /////////////////////////////////////////////////////////////// // API Test diff --git a/tmp_kakao/kakao_btn.png b/tmp_kakao/kakao_btn.png index a29c7a7f..b5054672 100644 Binary files a/tmp_kakao/kakao_btn.png and b/tmp_kakao/kakao_btn.png differ diff --git a/tmp_kakao/kakao_to_me.png b/tmp_kakao/kakao_to_me.png new file mode 100644 index 00000000..f6c98e3e Binary files /dev/null and b/tmp_kakao/kakao_to_me.png differ diff --git a/tmp_kakao/lib.join.php b/tmp_kakao/lib.join.php index 33bc6ca7..c3677cfb 100644 --- a/tmp_kakao/lib.join.php +++ b/tmp_kakao/lib.join.php @@ -2,6 +2,7 @@ require_once('_common.php'); require_once(__dir__.'/../d_setting/conf.php'); require_once(__dir__.'/../f_func/func.php'); +require(ROOT.'/f_func/class._Time.php'); function checkUsernameDup($username){ if(!$username){ @@ -48,9 +49,19 @@ function checkEmailDup($email){ return '적절하지 않은 길이입니다.'; } - $cnt = getRootDB()->queryFirstField('SELECT count(no) FROM member WHERE `email` = %s LIMIT 1', $email); - if($cnt != 0){ - return '이미 사용중인 이메일입니다'; + $userInfo = getRootDB()->queryFirstField('SELECT `no`, `delete_after` FROM member WHERE `email` = %s LIMIT 1', $email); + if($userInfo){ + $nowDate = _Time::DatetimeNow(); + if (!$userInfo['delete_after']) { + return '이미 사용중인 이메일입니다. 관리자에게 문의해주세요.'; + } + + if($userInfo['delete_after'] >= $userInfo){ + return "삭제 요청된 계정입니다.[{$userInfo['delete_after']}]"; + } + + //$userInfo['delete_after'] < $userInfo + getRootDB()->delete('member', 'no=%i', $userInfo['no']); } return true; } \ No newline at end of file diff --git a/tmp_kakao/oauth.php b/tmp_kakao/oauth.php index 3f6c54c8..a9bfb5c1 100644 --- a/tmp_kakao/oauth.php +++ b/tmp_kakao/oauth.php @@ -1,6 +1,5 @@ \n"; $me = $restAPI->meWithEmail(); -var_dump($me); +$oauth_mode = 'login'; $me['code'] = util::array_get($me['code'], 0); if($me['code']< 0){ switch($me['msg']){ case 'NotRegisteredUserException': - header('Location:join.php', true, 303); - die(); + $oauth_mode = 'join'; + break; default: - die('알 수 없는 에러:'.$me['msg']); + $oauth_mode = 'error'; } } +else{ + $_SESSION['kaccount_email'] = $me['kaccount_email']; +} - - -//이메일 주소를 받아옴 - -// -//$db = getRootDB(); -//TODO: 로그인된 유저인지 확인해야함. +?> + + + + + + + + \ No newline at end of file