From 541d8ddd4009065c7a867f44db0b1c13996271ce Mon Sep 17 00:00:00 2001 From: hide_d Date: Mon, 10 Sep 2018 00:22:57 +0900 Subject: [PATCH] =?UTF-8?q?=ED=86=A0=ED=81=B0=20=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=EC=B4=88=EA=B3=BC=EC=8B=9C=20=EC=A6=89=EC=8B=9C=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=95=84=EC=9B=83=20=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- f_install/j_create_admin.php | 1 + index.php | 8 -------- j_login.php | 8 ++++---- oauth_kakao/j_login_oauth.php | 4 ++-- src/sammo/Session.php | 21 +++++++++++++++++---- 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/f_install/j_create_admin.php b/f_install/j_create_admin.php index 7603cf25..bdae3551 100644 --- a/f_install/j_create_admin.php +++ b/f_install/j_create_admin.php @@ -52,6 +52,7 @@ $rootDB->insert('member',[ 'oauth_type' => 'NONE', 'id' => $username, 'email' => null, + 'token_valid_until'=>'2999-01-01 00:00:00', 'pw' => $finalPassword, 'salt' => $userSalt, 'grade'=> 6, diff --git a/index.php b/index.php index 0e5db2e4..eefddbe6 100644 --- a/index.php +++ b/index.php @@ -184,14 +184,6 @@ function postOAuthResult(result){ - diff --git a/j_login.php b/j_login.php index ac28aa51..70ef3548 100644 --- a/j_login.php +++ b/j_login.php @@ -41,7 +41,7 @@ function kakaoOAuthCheck(array $userInfo) : ?array { $refreshTokenValidUntil = $oauthInfo['refreshTokenValidUntil']??null; $OTPValue = $oauthInfo['OTPValue']??null; $OTPTrialUntil = $oauthInfo['OTPTrialUntil']??null; - $tokenValidUntil = $member['token_valid_until']; + $tokenValidUntil = $userInfo['token_valid_until']; if(!$accessToken || !$refreshToken || !$accessTokenValidUntil || !$refreshTokenValidUntil){ return [false, 'OAuth 정보가 보관되어 있지 않습니다. 카카오 로그인을 수행해 주세요.']; @@ -97,7 +97,7 @@ function kakaoOAuthCheck(array $userInfo) : ?array { } $userInfo = $RootDB->queryFirstRow( - 'SELECT `no`, `id`, `name`, `grade`, `delete_after`, `acl`, oauth_id, oauth_type, oauth_info '. + 'SELECT `no`, `id`, `name`, `grade`, `delete_after`, `acl`, oauth_id, oauth_type, oauth_info, token_valid_until '. 'from member where id=%s_username AND '. 'pw=sha2(concat(salt, %s_password, salt), 512)',[ 'username'=>$username, @@ -152,7 +152,7 @@ $RootDB->insert('member_log',[ if($userInfo['oauth_type'] == 'KAKAO'){ $oauthFailResult = kakaoOAuthCheck($userInfo); if($oauthFailResult !== null){ - $session->login($userInfo['no'], $userInfo['id'], $userInfo['grade'], true, Json::decode($userInfo['acl']??'{}')); + $session->login($userInfo['no'], $userInfo['id'], $userInfo['grade'], true, $userInfo['token_valid_until'], Json::decode($userInfo['acl']??'{}')); [$oauthReqOTP, $oauthFailReason] = $oauthFailResult; Json::die([ 'result'=>false, @@ -163,7 +163,7 @@ if($userInfo['oauth_type'] == 'KAKAO'){ } -$session->login($userInfo['no'], $userInfo['id'], $userInfo['grade'], false, Json::decode($userInfo['acl']??'{}')); +$session->login($userInfo['no'], $userInfo['id'], $userInfo['grade'], false, $userInfo['token_valid_until'], Json::decode($userInfo['acl']??'{}')); Json::die([ 'result'=>true, 'reqOTP'=>false, diff --git a/oauth_kakao/j_login_oauth.php b/oauth_kakao/j_login_oauth.php index 1eb6601d..6f8d02e3 100644 --- a/oauth_kakao/j_login_oauth.php +++ b/oauth_kakao/j_login_oauth.php @@ -174,7 +174,7 @@ if(!$tokenValidUntil || $tokenValidUntil < $now){ 'reason'=>'인증 코드를 보내는데 실패했습니다.' ]); } - $session->login($userInfo['no'], $userInfo['id'], $userInfo['grade'], true, Json::decode($userInfo['acl']??'{}')); + $session->login($userInfo['no'], $userInfo['id'], $userInfo['grade'], true, $userInfo['token_valid_until'], Json::decode($userInfo['acl']??'{}')); Json::die([ 'result'=>false, 'reqOTP'=>true, @@ -192,7 +192,7 @@ $RootDB->insert('member_log',[ ]) ]); -$session->login($userInfo['no'], $userInfo['id'], $userInfo['grade'], false, Json::decode($userInfo['acl']??'{}')); +$session->login($userInfo['no'], $userInfo['id'], $userInfo['grade'], false, $userInfo['token_valid_until'], Json::decode($userInfo['acl']??'{}')); Json::die([ 'result'=>true, 'reqOTP'=>false, diff --git a/src/sammo/Session.php b/src/sammo/Session.php index 392c0308..984e7ac3 100644 --- a/src/sammo/Session.php +++ b/src/sammo/Session.php @@ -10,6 +10,7 @@ namespace sammo; * @property string $ip IP * @property bool $reqOTP 인증 코드 필요 * @property array $acl 권한 + * @property string $tokenValidUntil 로그인 토큰 길이 */ class Session { @@ -23,6 +24,7 @@ class Session 'writeClosed'=>true, 'generalID'=>true, 'generalName'=>true, + 'tokenValidUntil'=>true, 'acl'=>true ]; @@ -165,7 +167,7 @@ class Session return Util::array_get($_SESSION[$name]); } - public function login(int $userID, string $userName, int $grade, bool $reqOTP, array $acl): Session + public function login(int $userID, string $userName, int $grade, bool $reqOTP, ?string $tokenValidUntil, array $acl): Session { $this->set('userID', $userID); $this->set('userName', $userName); @@ -174,6 +176,7 @@ class Session $this->set('userGrade', $grade); $this->set('acl', $acl); $this->set('reqOTP', $reqOTP); + $this->set('tokenValidUntil', $tokenValidUntil); return $this; } @@ -333,10 +336,20 @@ class Session public function isLoggedIn(bool $ignoreOTP = false): bool { - if (!$ignoreOTP && $this->reqOTP){ - return false; + if(!$ignoreOTP){ + if($this->reqOTP){ + return false; + } + if(!$this->tokenValidUntil){ + return false; + } + $now = TimeUtil::DatetimeNow(); + if($this->tokenValidUntil < $now){ + return false; + } } - else if ($this->userID) { + + if ($this->userID) { return true; } else { return false;