메인 페이지에 '비밀번호 초기화' 추가
This commit is contained in:
+2
-2
@@ -52,8 +52,8 @@ input::-webkit-input-placeholder {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-button{
|
.login_btn_group{
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-register{
|
.login-register{
|
||||||
|
|||||||
@@ -64,8 +64,17 @@ function getOAuthToken(mode, scope_list){
|
|||||||
|
|
||||||
function sendTempPasswordToKakaoTalk(){
|
function sendTempPasswordToKakaoTalk(){
|
||||||
$.post({
|
$.post({
|
||||||
url:'j_change_pw.php',
|
url:'oauth_kakao/j_login_oauth.php',
|
||||||
dataType:'json'
|
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){
|
}).then(function(obj){
|
||||||
if(!obj.result){
|
if(!obj.result){
|
||||||
alert(obj.reason);
|
alert(obj.reason);
|
||||||
@@ -163,7 +172,15 @@ function postOAuthResult(result){
|
|||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<div class="col-5 col-md-4 " style="position:relative;"><button type="button" onclick="getOAuthToken('login', ['account_email','talk_message']);" id="btn_kakao_login" title="카카오톡으로 가입&로그인"></button></div>
|
<div class="col-5 col-md-4 " style="position:relative;"><button type="button" onclick="getOAuthToken('login', ['account_email','talk_message']);" id="btn_kakao_login" title="카카오톡으로 가입&로그인"></button></div>
|
||||||
<div class="col-7 col-md-8">
|
<div class="col-7 col-md-8">
|
||||||
<button type="submit" class="btn btn-primary btn-lg btn-block login-button">로그인</button>
|
<div class="btn-group btn-group-lg d-flex login_btn_group" role="group">
|
||||||
|
<button type="submit" class="btn btn-primary login-button w-100">로그인</button>
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> </button>
|
||||||
|
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="btnGroupDrop1">
|
||||||
|
<a class="dropdown-item" href="javascript:getOAuthToken('change_pw', 'talk_message');">비밀번호 초기화</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
+23
-31
@@ -5,7 +5,7 @@ require(__dir__.'/../vendor/autoload.php');
|
|||||||
|
|
||||||
use \kakao\Kakao_REST_API_Helper as Kakao_REST_API_Helper;
|
use \kakao\Kakao_REST_API_Helper as Kakao_REST_API_Helper;
|
||||||
|
|
||||||
$nowDate = TimeUtil::DatetimeNow();
|
$now = TimeUtil::DatetimeNow();
|
||||||
|
|
||||||
$session = Session::requireLogin([
|
$session = Session::requireLogin([
|
||||||
'reason'=>'로그인이 되어있지 않습니다'
|
'reason'=>'로그인이 되어있지 않습니다'
|
||||||
@@ -13,8 +13,6 @@ $session = Session::requireLogin([
|
|||||||
$userID = Session::getUserID();
|
$userID = Session::getUserID();
|
||||||
$access_token = $session->access_token;
|
$access_token = $session->access_token;
|
||||||
$expires = $session->expires;
|
$expires = $session->expires;
|
||||||
$refresh_token = $session->refresh_token;
|
|
||||||
$refresh_token_expires = $session->refresh_token_expires;
|
|
||||||
|
|
||||||
if(!$access_token || !$expires){
|
if(!$access_token || !$expires){
|
||||||
Json::die([
|
Json::die([
|
||||||
@@ -27,44 +25,37 @@ if(!$access_token || !$expires){
|
|||||||
//TODO: join과 login의 동작이 비슷하다. helper class로 묶자.
|
//TODO: join과 login의 동작이 비슷하다. helper class로 묶자.
|
||||||
$restAPI = new Kakao_REST_API_Helper($access_token);
|
$restAPI = new Kakao_REST_API_Helper($access_token);
|
||||||
|
|
||||||
if($expires < $nowDate && (!$refresh_token || ($refresh_token_expires < $nowDate))){
|
$session->logout();
|
||||||
|
|
||||||
|
if($expires < $now){
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'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");
|
RootDB::db()->query("lock tables member write, member_log write");
|
||||||
|
|
||||||
$isUser = RootDB::db()->queryFirstRow(
|
$oauthInfo = Json::decode(RootDB::db()->queryFirstField('SELECT oauth_info from member where no=%i',$userID))??[];
|
||||||
'SELECT count(`no`) from member where no=%i',$userID);
|
if(!$oauthInfo){
|
||||||
if(!$isUser){
|
|
||||||
Json::die([
|
Json::die([
|
||||||
'result'=>false,
|
'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);
|
$newPassword = Util::randomStr(6);
|
||||||
$tmpPassword = Util::hashPassword(RootDB::getGlobalSalt(), $newPassword);
|
$tmpPassword = Util::hashPassword(RootDB::getGlobalSalt(), $newPassword);
|
||||||
$newSalt = bin2hex(random_bytes(8));
|
$newSalt = bin2hex(random_bytes(8));
|
||||||
@@ -89,12 +80,13 @@ if($sendResult['code'] < 0){
|
|||||||
|
|
||||||
RootDB::db()->update('member', [
|
RootDB::db()->update('member', [
|
||||||
'pw'=>$newFinalPassword,
|
'pw'=>$newFinalPassword,
|
||||||
'salt'=>$newSalt
|
'salt'=>$newSalt,
|
||||||
|
'oauth_info'=>Json::encode($oauthInfo),
|
||||||
],'no=%i', $userID);
|
],'no=%i', $userID);
|
||||||
|
|
||||||
RootDB::db()->insert('member_log', [
|
RootDB::db()->insert('member_log', [
|
||||||
'member_no'=>$userID,
|
'member_no'=>$userID,
|
||||||
'date'=>$nowDate,
|
'date'=>$now,
|
||||||
'action_type'=>'change_pw',
|
'action_type'=>'change_pw',
|
||||||
'action'=>Json::encode([
|
'action'=>Json::encode([
|
||||||
'type'=>'kakao',
|
'type'=>'kakao',
|
||||||
|
|||||||
@@ -174,7 +174,6 @@ class Session
|
|||||||
$this->set('userGrade', $grade);
|
$this->set('userGrade', $grade);
|
||||||
$this->set('acl', $acl);
|
$this->set('acl', $acl);
|
||||||
$this->set('reqOTP', $reqOTP);
|
$this->set('reqOTP', $reqOTP);
|
||||||
$this->set('access_token', null);
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user