oauth 인증중 token_valid_until만 table column으로 분리
This commit is contained in:
@@ -20,16 +20,18 @@ ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|||||||
CREATE TABLE `member` (
|
CREATE TABLE `member` (
|
||||||
`NO` INT(11) NOT NULL AUTO_INCREMENT,
|
`NO` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
`oauth_id` BIGINT(20) NULL DEFAULT NULL,
|
`oauth_id` BIGINT(20) NULL DEFAULT NULL,
|
||||||
`oauth_type` ENUM('NONE','KAKAO') NOT NULL,
|
|
||||||
`ID` VARCHAR(64) NOT NULL,
|
`ID` VARCHAR(64) NOT NULL,
|
||||||
`EMAIL` VARCHAR(64) NULL DEFAULT NULL,
|
`EMAIL` VARCHAR(64) NULL DEFAULT NULL,
|
||||||
|
`oauth_type` ENUM('NONE','KAKAO') NOT NULL,
|
||||||
|
`oauth_info` TEXT NOT NULL DEFAULT '{}',
|
||||||
|
`token_valid_until` DATETIME NULL DEFAULT NULL,
|
||||||
`PW` CHAR(128) NOT NULL,
|
`PW` CHAR(128) NOT NULL,
|
||||||
`salt` CHAR(16) NOT NULL,
|
`salt` CHAR(16) NOT NULL,
|
||||||
`third_use` INT(1) NOT NULL DEFAULT '0',
|
`third_use` INT(1) NOT NULL DEFAULT '0',
|
||||||
`NAME` VARCHAR(64) NOT NULL,
|
`NAME` VARCHAR(64) NOT NULL,
|
||||||
`PICTURE` VARCHAR(64) NULL DEFAULT 'default.jpg',
|
`PICTURE` VARCHAR(64) NULL DEFAULT 'default.jpg',
|
||||||
`IMGSVR` INT(1) NULL DEFAULT '0',
|
`IMGSVR` INT(1) NULL DEFAULT '0',
|
||||||
`acl` text NOT NULL DEFAULT '{}' COMMENT 'json',
|
`acl` TEXT NOT NULL DEFAULT '{}' COMMENT 'json',
|
||||||
`GRADE` INT(1) NULL DEFAULT '1',
|
`GRADE` INT(1) NULL DEFAULT '1',
|
||||||
`REG_NUM` INT(3) NULL DEFAULT '0',
|
`REG_NUM` INT(3) NULL DEFAULT '0',
|
||||||
`REG_DATE` DATETIME NOT NULL,
|
`REG_DATE` DATETIME NOT NULL,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ $userID = Session::getUserID();
|
|||||||
// 외부 파라미터
|
// 외부 파라미터
|
||||||
|
|
||||||
$db = RootDB::db();
|
$db = RootDB::db();
|
||||||
$member = $db->queryFirstRow('SELECT `id`, `name`, `grade`, `picture`, reg_date, third_use, acl, oauth_type, oauth_info FROM `member` WHERE `NO` = %i', $userID);
|
$member = $db->queryFirstRow('SELECT `id`, `name`, `grade`, `picture`, reg_date, third_use, acl, oauth_type, token_valid_until FROM `member` WHERE `NO` = %i', $userID);
|
||||||
|
|
||||||
if(!$member['picture']){
|
if(!$member['picture']){
|
||||||
$picture = ServConfig::getSharedIconPath().'/default.jpg';
|
$picture = ServConfig::getSharedIconPath().'/default.jpg';
|
||||||
@@ -30,8 +30,7 @@ else{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$oauthInfo = Json::decode($member['oauth_info'])??[];
|
$tokenValidUntil = $member['token_valid_until'];
|
||||||
$loginTokenValid = $oauthInfo['OTPValidUntil']??null;
|
|
||||||
|
|
||||||
if($member['grade'] == 6) {
|
if($member['grade'] == 6) {
|
||||||
$grade = '운영자';
|
$grade = '운영자';
|
||||||
@@ -86,6 +85,6 @@ Json::die([
|
|||||||
'third_use'=>($member['third_use']!=0),
|
'third_use'=>($member['third_use']!=0),
|
||||||
'acl'=>$acl,
|
'acl'=>$acl,
|
||||||
'oauth_type'=>$member['oauth_type'],
|
'oauth_type'=>$member['oauth_type'],
|
||||||
'login_token_valid'=>$loginTokenValid
|
'token_valid_until'=>$tokenValidUntil
|
||||||
|
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ function postOAuthResult(result){
|
|||||||
<div>
|
<div>
|
||||||
인증 코드가 필요합니다.<br><br>
|
인증 코드가 필요합니다.<br><br>
|
||||||
카카오톡의 '나와의 채팅'란을 확인해 주세요.<br>
|
카카오톡의 '나와의 채팅'란을 확인해 주세요.<br>
|
||||||
(별도의 알림[소리, 진동, 숫자]가 발생하지 않습니다.)
|
(별도의 알림[소리, 진동, 숫자]이 발생하지 않습니다.)
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group mt-4" role="group">
|
<div class="input-group mt-4" role="group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
|
|||||||
+2
-2
@@ -41,7 +41,7 @@ function kakaoOAuthCheck(array $userInfo) : ?array {
|
|||||||
$refreshTokenValidUntil = $oauthInfo['refreshTokenValidUntil']??null;
|
$refreshTokenValidUntil = $oauthInfo['refreshTokenValidUntil']??null;
|
||||||
$OTPValue = $oauthInfo['OTPValue']??null;
|
$OTPValue = $oauthInfo['OTPValue']??null;
|
||||||
$OTPTrialUntil = $oauthInfo['OTPTrialUntil']??null;
|
$OTPTrialUntil = $oauthInfo['OTPTrialUntil']??null;
|
||||||
$OTPValidUntil = $oauthInfo['OTPValidUntil']??null;
|
$tokenValidUntil = $member['token_valid_until'];
|
||||||
|
|
||||||
if(!$accessToken || !$refreshToken || !$accessTokenValidUntil || !$refreshTokenValidUntil){
|
if(!$accessToken || !$refreshToken || !$accessTokenValidUntil || !$refreshTokenValidUntil){
|
||||||
return [false, 'OAuth 정보가 보관되어 있지 않습니다. 카카오 로그인을 수행해 주세요.'];
|
return [false, 'OAuth 정보가 보관되어 있지 않습니다. 카카오 로그인을 수행해 주세요.'];
|
||||||
@@ -79,7 +79,7 @@ function kakaoOAuthCheck(array $userInfo) : ?array {
|
|||||||
], 'no=%i', $userInfo['no']);
|
], 'no=%i', $userInfo['no']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($OTPValidUntil && $now <= $OTPValidUntil){
|
if($tokenValidUntil && $now <= $tokenValidUntil){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ function fillUserInfo(result){
|
|||||||
}
|
}
|
||||||
$('#slot_oauth_type').text(result.oauth_type);
|
$('#slot_oauth_type').text(result.oauth_type);
|
||||||
if(result.oauth_type != 'NONE'){
|
if(result.oauth_type != 'NONE'){
|
||||||
$('#slot_token_valid_until').text(result.login_token_valid);
|
$('#slot_token_valid_until').text(result.token_valid_until);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$('#slot_token_valid_until').parent().html('');
|
$('#slot_token_valid_until').parent().html('');
|
||||||
|
|||||||
@@ -78,15 +78,15 @@ if($OTPValue != $otp){
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$OTPValidUntil = TimeUtil::DatetimeFromNowDay(10);
|
$tokenValidUntil = TimeUtil::DatetimeFromNowDay(10);
|
||||||
$session->setReqOTP(false);
|
$session->setReqOTP(false);
|
||||||
$oauthInfo['OTPValidUntil'] = $OTPValidUntil;
|
|
||||||
RootDB::db()->update('member', [
|
RootDB::db()->update('member', [
|
||||||
'oauth_info'=>Json::encode($oauthInfo)
|
'oauth_info'=>Json::encode($oauthInfo),
|
||||||
|
'token_valid_until'=>$tokenValidUntil,
|
||||||
], 'no=%i', $userNo);
|
], 'no=%i', $userNo);
|
||||||
|
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>true,
|
'result'=>true,
|
||||||
'reset'=>false,
|
'reset'=>false,
|
||||||
'reason'=>"로그인을 성공했습니다. {$OTPValidUntil}까지 유효합니다."
|
'reason'=>"로그인을 성공했습니다. {$tokenValidUntil}까지 유효합니다."
|
||||||
]);
|
]);
|
||||||
@@ -117,7 +117,7 @@ if(!$email){
|
|||||||
|
|
||||||
|
|
||||||
$userInfo = $RootDB->queryFirstRow(
|
$userInfo = $RootDB->queryFirstRow(
|
||||||
'SELECT `no`, `id`, `name`, `grade`, `delete_after`, `acl`, oauth_info from member where email=%s',$email);
|
'SELECT `no`, `id`, `name`, `grade`, `delete_after`, `acl`, oauth_info, token_valid_until from member where email=%s',$email);
|
||||||
|
|
||||||
if(!$userInfo){
|
if(!$userInfo){
|
||||||
$restAPI->unlink();
|
$restAPI->unlink();
|
||||||
@@ -164,9 +164,9 @@ RootDB::db()->update('member', [
|
|||||||
], 'no=%i', $userInfo['no']);
|
], 'no=%i', $userInfo['no']);
|
||||||
|
|
||||||
|
|
||||||
$OTPValidUntil = $oauthInfo['OTPValidUntil']??null;
|
$tokenValidUntil = $userInfo['token_valid_until'];
|
||||||
|
|
||||||
if(!$OTPValidUntil || $OTPValidUntil < $now){
|
if(!$tokenValidUntil || $tokenValidUntil < $now){
|
||||||
if(!createOTPbyUserNO($userInfo['no'])){
|
if(!createOTPbyUserNO($userInfo['no'])){
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result'=>false,
|
||||||
|
|||||||
@@ -12,29 +12,28 @@ $session = Session::requireLogin([
|
|||||||
|
|
||||||
$userID = Session::getUserID();
|
$userID = Session::getUserID();
|
||||||
|
|
||||||
$oauthInfo = Json::decode(RootDB::db()->queryFirstField('SELECT oauth_info from member where no=%i',$userID))??[];
|
$tokenValidUntil = RootDB::db()->queryFirstField('SELECT token_valid_until from member where no=%i',$userID);
|
||||||
if(!$oauthInfo){
|
|
||||||
|
if(!$tokenValidUntil){
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result'=>false,
|
||||||
'reason'=>'초기화 가능한 로그인 상태가 아닙니다.'
|
'reason'=>'초기화 가능한 로그인 상태가 아닙니다.'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$OTPValidUntil = $oauthInfo['OTPValidUntil']??null;
|
|
||||||
|
|
||||||
$now = TimeUtil::DatetimeNow();
|
$now = TimeUtil::DatetimeNow();
|
||||||
$expectedDate = TimeUtil::DatetimeFromNowDay(5);
|
$expectedDate = TimeUtil::DatetimeFromNowDay(5);
|
||||||
|
|
||||||
if($expectedDate <= $OTPValidUntil){
|
if($expectedDate <= $tokenValidUntil){
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'result'=>false,
|
||||||
'reason'=>'아직 연장 가능하지 않습니다.'
|
'reason'=>'아직 연장 가능하지 않습니다.'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($oauthInfo['OTPValidUntil']);
|
unset($oauthInfo['tokenValidUntil']);
|
||||||
RootDB::db()->update('member', [
|
RootDB::db()->update('member', [
|
||||||
'oauth_info'=>Json::encode($oauthInfo)
|
'token_valid_until'=> null
|
||||||
], 'no=%i', $userID);
|
], 'no=%i', $userID);
|
||||||
|
|
||||||
$session->logout();
|
$session->logout();
|
||||||
|
|||||||
Reference in New Issue
Block a user