From 64aecaf28be844fdcf7baf13ccf8f03634c8e82c Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 9 Sep 2018 21:53:00 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=EC=97=90=20'=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94'=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/login.css | 4 +-- index.php | 21 +++++++++++++-- oauth_kakao/j_change_pw.php | 54 ++++++++++++++++--------------------- src/sammo/Session.php | 1 - 4 files changed, 44 insertions(+), 36 deletions(-) diff --git a/css/login.css b/css/login.css index d8c3d4ff..66fdacf3 100644 --- a/css/login.css +++ b/css/login.css @@ -52,8 +52,8 @@ input::-webkit-input-placeholder { } -.login-button{ - margin-top: 5px; +.login_btn_group{ + margin-top: 5px; } .login-register{ diff --git a/index.php b/index.php index ed2d54fa..0e161a0c 100644 --- a/index.php +++ b/index.php @@ -64,8 +64,17 @@ function getOAuthToken(mode, scope_list){ function sendTempPasswordToKakaoTalk(){ $.post({ - url:'j_change_pw.php', + url:'oauth_kakao/j_login_oauth.php', dataType:'json' + }).then(function(obj){ + var t = $.Deferred(); + if(!obj.result){ + t.reject(); + } + return $.post({ + url:'oauth_kakao/j_change_pw.php', + dataType:'json' + }); }).then(function(obj){ if(!obj.result){ alert(obj.reason); @@ -163,7 +172,15 @@ function postOAuthResult(result){
- +
diff --git a/oauth_kakao/j_change_pw.php b/oauth_kakao/j_change_pw.php index 1f621042..37b23c3a 100644 --- a/oauth_kakao/j_change_pw.php +++ b/oauth_kakao/j_change_pw.php @@ -5,7 +5,7 @@ require(__dir__.'/../vendor/autoload.php'); use \kakao\Kakao_REST_API_Helper as Kakao_REST_API_Helper; -$nowDate = TimeUtil::DatetimeNow(); +$now = TimeUtil::DatetimeNow(); $session = Session::requireLogin([ 'reason'=>'로그인이 되어있지 않습니다' @@ -13,8 +13,6 @@ $session = Session::requireLogin([ $userID = Session::getUserID(); $access_token = $session->access_token; $expires = $session->expires; -$refresh_token = $session->refresh_token; -$refresh_token_expires = $session->refresh_token_expires; if(!$access_token || !$expires){ Json::die([ @@ -27,44 +25,37 @@ if(!$access_token || !$expires){ //TODO: join과 login의 동작이 비슷하다. helper class로 묶자. $restAPI = new Kakao_REST_API_Helper($access_token); -if($expires < $nowDate && (!$refresh_token || ($refresh_token_expires < $nowDate))){ +$session->logout(); + +if($expires < $now){ Json::die([ 'result'=>false, - 'reason'=>'로그인 토큰 만료.'.$refresh_token_expires.' 다시 카카오로그인을 수행해주세요.' + 'reason'=>'로그인 토큰 만료. 카카오 로그인을 먼저 수행해주세요.' ]); } -if($expires < $nowDate){ - $session->kaccount_email = null; - $email = null; - - $result = $restAPI->refresh_access_token($refresh_token); - if(!isset($result)){ - Json::die([ - 'result'=>false, - 'reason'=>'카카오 로그인 과정 중 추가 갱신 절차를 실패했습니다' - ]); - } - - $access_token = $result['access_token']; - $expires = TimeUtil::DatetimeFromNowSecond($result['expires_in']); - if(isset($result['refresh_token'])){ - $refresh_token = Util::array_get($result['refresh_token']); - $refresh_token_expires = TimeUtil::DatetimeFromNowSecond($result['refresh_token_expires_in']); - } -} - RootDB::db()->query("lock tables member write, member_log write"); -$isUser = RootDB::db()->queryFirstRow( - 'SELECT count(`no`) from member where no=%i',$userID); -if(!$isUser){ +$oauthInfo = Json::decode(RootDB::db()->queryFirstField('SELECT oauth_info from member where no=%i',$userID))??[]; +if(!$oauthInfo){ Json::die([ 'result'=>false, - 'reason'=>'회원이 아닙니다. 관리자에게 문의해주세요.' + 'reason'=>'제대로 로그인이 이루어져 있지 않습니다.' ]); } +$nextPasswordChange = $oauthInfo['nextPasswordChange']??null; +if($nextPasswordChange && $now < $nextPasswordChange){ + Json::die([ + 'result'=>false, + 'reason'=>'비밀번호를 초기화한지 얼마 지나지 않았습니다.' + ]); +} + +$nextPasswordChange = TimeUtil::DatetimeFromNowHour(4); +$oauthInfo['nextPasswordChange'] = $nextPasswordChange; + + $newPassword = Util::randomStr(6); $tmpPassword = Util::hashPassword(RootDB::getGlobalSalt(), $newPassword); $newSalt = bin2hex(random_bytes(8)); @@ -89,12 +80,13 @@ if($sendResult['code'] < 0){ RootDB::db()->update('member', [ 'pw'=>$newFinalPassword, - 'salt'=>$newSalt + 'salt'=>$newSalt, + 'oauth_info'=>Json::encode($oauthInfo), ],'no=%i', $userID); RootDB::db()->insert('member_log', [ 'member_no'=>$userID, - 'date'=>$nowDate, + 'date'=>$now, 'action_type'=>'change_pw', 'action'=>Json::encode([ 'type'=>'kakao', diff --git a/src/sammo/Session.php b/src/sammo/Session.php index f3f0ced6..392c0308 100644 --- a/src/sammo/Session.php +++ b/src/sammo/Session.php @@ -174,7 +174,6 @@ class Session $this->set('userGrade', $grade); $this->set('acl', $acl); $this->set('reqOTP', $reqOTP); - $this->set('access_token', null); return $this; }