isLoggedIn()){ Json::die([ 'result'=>false, 'reset'=>true, 'reason'=>'이미 로그인 되어있습니다.' ]); } if(!$session->isLoggedIn(true)){ Json::die([ 'result'=>false, 'reset'=>true, 'reason'=>'인증 코드를 입력할 수 있는 상태가 아닙니다.' ]); } $otp = Util::getPost('otp', 'int'); if(!$otp){ Json::die([ 'result'=>false, 'reset'=>false, 'reason'=>'인증 코드가 입력되지 않았습니다.' ]); } $userNo = $session->getUserID(); $oauthInfo = Json::decode(RootDB::db()->queryFirstField('SELECT oauth_info FROM member WHERE no=%i', $userNo))??[]; if(!$oauthInfo){ $session->logout(); Json::die([ 'result'=>false, 'reset'=>true, 'reason'=>'계정이 정상적으로 등록되어있지 않습니다.' ]); } $OTPValue = $oauthInfo['OTPValue']??null; $OTPTrialUntil = $oauthInfo['OTPTrialUntil']??null; $OTPTrialCount = $oauthInfo['OTPTrialCount']??0; $now = TimeUtil::now(); if(!$OTPTrialUntil || $OTPTrialUntil <= $now){ $session->logout(); Json::die([ 'result'=>false, 'reset'=>true, 'reason'=>'인증 기한이 만료되었습니다. 다시 로그인해주세요.' ]); } if($OTPTrialCount <= 0){ Json::die([ 'result'=>false, 'reset'=>false, 'reason'=>"인증 실패 횟수를 초과했습니다. {$OTPTrialUntil}까지 기다려주세요." ]); } if($OTPValue != $otp){ $OTPTrialCount -= 1; $oauthInfo['OTPTrialCount'] = $OTPTrialCount; RootDB::db()->update('member', [ 'oauth_info'=>Json::encode($oauthInfo) ], 'no=%i', $userNo); Json::die([ 'result'=>false, 'reset'=>false, 'reason'=>"인증 번호가 틀렸습니다. {$OTPTrialCount}회 더 시도할 수 있습니다." ]); } $tokenValidUntil = TimeUtil::nowAddDays(10); $session->setReqOTP(false, $tokenValidUntil); RootDB::db()->update('member', [ 'oauth_info'=>Json::encode($oauthInfo), 'token_valid_until'=>$tokenValidUntil, ], 'no=%i', $userNo); Json::die([ 'result'=>true, 'reset'=>false, 'validUntil'=>$tokenValidUntil, ]);