본문으로 건너뛰기

반응형 스킨에서 마이앱 지원 및 모바일샵 설정 유효성 검사 추가

PHP 8 · GODO26
변경 파일 수: 23개
변경 파일 목록
23
변경 파일 코드
추가삭제
Admin/design/design_skin_list.php+71-57
변경 전design_skin_list.php
};
}
 
// 적응형 → 반응형 (마이앱 사용 중이면 차단)
if (isCurrentAdaptive && isTargetResponsive && isMyappInstalled && isMyappReleased) {
return {
message: '현재 스킨 유형 변경이 잠시 제한되어 있습니다.',
subMessage: '<p class="layer-description--sub">'
+ '안정적인 마이앱 서비스 운영을 위해 현재 스킨 유형 변경이 잠시 제한되어 있습니다.<br>'
+ '마이앱 이용 중인 사장님께 더 편리하고 자유로운 디자인 환경을 제공하고자 기능을 고도화하고 있습니다.<br>'
+ '곧 업데이트를 통해 찾아뵐 예정이니, 잠시만 기다려 주시면 감사하겠습니다.'
+ '</p>',
onConfirm: 'block'
};
}
 
// 적응형 → 반응형 (모바일샵 사용 중)
if (isCurrentAdaptive && isTargetResponsive && mobileShopFlValue === 'y') {
return {
},
skinPublish: (params) => {
const { skinName, skinType, skinCode } = params;
const config = Utils.getSkinPublishConfig(
currentSkinType,
skinType,
mobileShopFl,
skinName,
);
 
NCDSConfirm({
message: config.message,
subMessage: config.subMessage
}).then(function(result) {
if(!result) return;
 
// 스킨 변경 폼 제출 함수
const submitSkinChangeForm = () => {
const form = document.createElement('form');
form.action = 'design_skin_list_ps.php';
form.method = 'post';
form.target = 'ifrmProcess';
const sno = '<?php echo $mallSno; ?>';
const formData = {
mode: 'skinChange',
skinType: skinType,
skinUse: 'Live',
[`${skinType}Skin`]: skinCode,
sno: sno
 
 
 
 
 
 
 
 
 
 
 
 
 
 
};
Utils.appendFormData(form, formData);
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
};
 
switch (config.onConfirm) {
case 'block':
break;
 
 
 
 
 
 
 
 
 
 
 
 
case 'redirect':
// 모바일샵 설정 페이지로 이동만 (스킨 변경 없음)
location.href = '/mobile/mobile_config.php';
break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
case 'publish':
default:
// 스킨 변경 (리다이렉트는 백엔드에서 자동 처리)
submitSkinChangeForm();
break;
}
})
}
}
 
 
변경 후design_skin_list.php
};
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// 적응형 → 반응형 (모바일샵 사용 중)
if (isCurrentAdaptive && isTargetResponsive && mobileShopFlValue === 'y') {
return {
},
skinPublish: (params) => {
const { skinName, skinType, skinCode } = params;
 
 
 
 
 
 
 
// 기존 게시 흐름
const proceedWithPublish = () => {
const config = Utils.getSkinPublishConfig(
currentSkinType,
skinType,
mobileShopFl,
skinName,
);
 
NCDSConfirm({
message: config.message,
subMessage: config.subMessage
}).then(function(result) {
if(!result) return;
 
// 스킨 변경 폼 제출 함수
const submitSkinChangeForm = () => {
const form = document.createElement('form');
form.action = 'design_skin_list_ps.php';
form.method = 'post';
form.target = 'ifrmProcess';
const sno = '<?php echo $mallSno; ?>';
const formData = {
mode: 'skinChange',
skinType: skinType,
skinUse: 'Live',
[`${skinType}Skin`]: skinCode,
sno: sno
};
Utils.appendFormData(form, formData);
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
};
 
 
 
 
 
 
switch (config.onConfirm) {
case 'redirect':
// 모바일샵 설정 페이지로 이동만 (스킨 변경 없음)
location.href = '/mobile/mobile_config.php';
break;
 
case 'publish':
default:
// 스킨 변경 (리다이렉트는 백엔드에서 자동 처리)
submitSkinChangeForm();
break;
}
});
};
 
// 마이앱 사전 체크: 적응형↔반응형 스킨 유형 전환 + 마이앱 사용 중
if (currentSkinType !== skinType && isMyappInstalled && isMyappReleased) {
NCDSConfirm({
message: '마이앱(MyApp) 서비스 운영에 주의가 필요합니다.',
subMessage: '<p class="layer-description--sub">'
+ '마이앱 서비스 운영 중 스킨 유형을 변경할 경우, 서비스 운영에 다음과 같은 문제가 발생할 수 있습니다.'
+ '<br><br>'
+ '1. 사용자의 기존 앱 로그인 정보 및 세션이 유지되지 않습니다.<br>'
+ '2. 스킨 변경 시 도메인 정보 변경으로 인해 앱 내 페이지 이동 시 404 오류가 발생할 수 있습니다.<br>'
+ '3. 변경된 화면 구성에 따라 앱 스토어(Apple/Google) 재심사 및 승인이 필요합니다.'
+ '<br><br>'
+ '위 내용을 확인하였으며, 스킨 변경을 진행하시겠습니까?'
+ '</p>',
btnText: {
cancelLabel: '취소',
confirmLabel: '동의 후 변경하기'
}
}).then(function(agreed) {
if (!agreed) return;
proceedWithPublish();
});
return;
}
 
proceedWithPublish();
 
 
 
 
 
 
}
}
 
 
Admin/mobile/mobile_config.php+11
변경 전mobile_config.php
$(document).ready(function(){
const currentSkinType = '<?= $currentSkinType ?? 'adaptive' ?>';
const initialMobileShopFl = '<?= $data['mobileShopFl'] ?? 'n' ?>';
 
 
 
 
 
 
 
 
 
 
 
 
$("#frmMobileShop").validate({
submitHandler: function (form) {
 
변경 후mobile_config.php
$(document).ready(function(){
const currentSkinType = '<?= $currentSkinType ?? 'adaptive' ?>';
const initialMobileShopFl = '<?= $data['mobileShopFl'] ?? 'n' ?>';
const isMyappInstalled = <?= json_encode($isMyappInstalled ?? false) ?>;
const isMyappReleased = <?= json_encode($isMyappReleased ?? false) ?>;
 
// 마이앱 사용 중 + 적응형 스킨 사용 중 + 모바일샵 사용안함인 경우 안내 얼럿
if (isMyappInstalled && isMyappReleased && currentSkinType === 'adaptive' && initialMobileShopFl === 'n') {
NCDSAlert({
message: '모바일샵을 \'사용함\'으로 변경해 주세요.',
subMessage: '현재 적응형 스킨이 적용된 상태에서 모바일샵이 \'사용안함\'으로 설정되어 있습니다. 이 설정에서는 마이앱 실행 시 사용자 랜딩이 정상적으로 이루어지지 않을 수 있습니다. 원활한 서비스 제공을 위해 모바일샵을 \'사용함\'으로 변경해 주세요.',
iconType: 'warning'
});
}
 
$("#frmMobileShop").validate({
submitHandler: function (form) {
 
DesignEditor/front/intro/adult_guest/_contents.html+1-1
변경 전_contents.html
</a>
<!--{/}-->
<!--{? useGoogleLogin}-->
<a class="js_btn_google_login" href="#" data-google-type="login" data-return-url="{=returnUrl}"> <img src="\{=c.PATH_DESIGN_EDITOR_GD_SHARE}img/etc/pc_google.png" alt="{=__('구글')}{=__('아이디 로그인')}"></a>
<!--{/}-->
</div>
<!--{/}-->
 
변경 후_contents.html
</a>
<!--{/}-->
<!--{? useGoogleLogin}-->
<a class="js_btn_google_login" href="#" data-google-type="login" data-return-url="{=googleReturnUrl}"> <img src="\{=c.PATH_DESIGN_EDITOR_GD_SHARE}img/etc/pc_google.png" alt="{=__('구글')}{=__('아이디 로그인')}"></a>
<!--{/}-->
</div>
<!--{/}-->
 
DesignEditor/front/intro/member/_contents.html+1-1
변경 전_contents.html
</a>
<!--{/}-->
<!--{? useGoogleLogin}-->
<a class="js_btn_google_login" data-google-type="login" data-return-url="{=returnUrl}" href="#"> <img src="\{=c.PATH_DESIGN_EDITOR_GD_SHARE}img/etc/pc_google.png" alt="{=__('구글')}{=__('아이디 로그인')}"></a>
<!--{/}-->
</div>
<div class="btn_login_box">
 
변경 후_contents.html
</a>
<!--{/}-->
<!--{? useGoogleLogin}-->
<a class="js_btn_google_login" data-google-type="login" data-return-url="{=googleReturnUrl}" href="#"> <img src="\{=c.PATH_DESIGN_EDITOR_GD_SHARE}img/etc/pc_google.png" alt="{=__('구글')}{=__('아이디 로그인')}"></a>
<!--{/}-->
</div>
<div class="btn_login_box">
 
DesignEditor/front/member/join_method/_contents.html+1-1
변경 전_contents.html
</a>
<!--{/}-->
<!--{? useGoogleLogin}-->
<a href="#" class="btn_google_login js_btn_google_login" data-google-type="join_method" data-return-url="{=returnUrl}"><img src="\{=c.PATH_DESIGN_EDITOR_GD_SHARE}img/etc/pc_google_join.png" alt="{=__('구글')} {=__('아이디 회원가입')}"></a>
<!--{/}-->
</div>
 
 
변경 후_contents.html
</a>
<!--{/}-->
<!--{? useGoogleLogin}-->
<a href="#" class="btn_google_login js_btn_google_login" data-google-type="join_method" data-return-url="{=googleUrl}"><img src="\{=c.PATH_DESIGN_EDITOR_GD_SHARE}img/etc/pc_google_join.png" alt="{=__('구글')} {=__('아이디 회원가입')}"></a>
<!--{/}-->
</div>
 
 
DesignEditor/front/member/login/_contents.html+1-1
변경 전_contents.html
</a>
<!--{ / }-->
<!--{ ? useGoogleLogin }-->
<a href="#" class="btn_google_login js_btn_google_login" data-google-type="login" data-return-url="{=returnUrl}"> <img src="\{=c.PATH_DESIGN_EDITOR_GD_SHARE}img/etc/pc_google.png" alt="{=__('구글')} {=__('아이디 로그인')}"></a>
<!--{ / }-->
</div>
<div class="btn_login_box">
 
변경 후_contents.html
</a>
<!--{ / }-->
<!--{ ? useGoogleLogin }-->
<a href="#" class="btn_google_login js_btn_google_login" data-google-type="login" data-return-url="{=googleReturnUrl}"> <img src="\{=c.PATH_DESIGN_EDITOR_GD_SHARE}img/etc/pc_google.png" alt="{=__('구글')} {=__('아이디 로그인')}"></a>
<!--{ / }-->
</div>
<div class="btn_login_box">
 
DesignEditor/front/mypage/my_page_password/_contents.html+2-2
변경 전_contents.html
</div>
<div class="btn_center_box">
<a class="btn_pw_cancel js_btn_back"><em>{=__('취소')}</em></a>
<button type="button" data-return-url="../mypage/my_page.php" class="btn_pw_certify js_btn_kakao_login" data-kakao-type="{=kakaoType}"><em>{=__('인증하기')}</em></button>
</div>
<!--{:useWonder}-->
<div class="sns_cont">
</div>
<div class="btn_center_box">
<a class="btn_pw_cancel js_btn_back"><em>{=__('취소')}</em></a>
<button type="button" data-return-url="../mypage/my_page.php" class="btn_pw_certify js_btn_google_login" data-google-type="{=googleType}"><em>{=__('인증하기')}</em></button>
</div>
<!--{:}-->
<form id="formFind">
 
변경 후_contents.html
</div>
<div class="btn_center_box">
<a class="btn_pw_cancel js_btn_back"><em>{=__('취소')}</em></a>
<button type="button" data-return-url="{=kakaoReturnUrl}" class="btn_pw_certify js_btn_kakao_login" data-kakao-type="{=kakaoType}"><em>{=__('인증하기')}</em></button>
</div>
<!--{:useWonder}-->
<div class="sns_cont">
</div>
<div class="btn_center_box">
<a class="btn_pw_cancel js_btn_back"><em>{=__('취소')}</em></a>
<button type="button" data-return-url="{=googleReturnUrl}" class="btn_pw_certify js_btn_google_login" data-google-type="{=googleType}"><em>{=__('인증하기')}</em></button>
</div>
<!--{:}-->
<form id="formFind">
 
Controller/Admin/Mobile/MobileConfigController.php+14
변경 전MobileConfigController.php
use Framework\Enum\ExternalUrl;
use Exception;
use Origin\Enum\Design\DesignEditorSkinType;
 
use Request;
 
/**
$designSkinConfig = gd_policy('design.skin');
$currentSkinType = $designSkinConfig['skinType'] ?? DesignEditorSkinType::ADAPTIVE->value;
 
 
 
 
 
 
 
 
 
 
 
 
//--- 관리자 디자인 템플릿
$this->setData('data', $data);
$this->setData('browserCheck', $browserCheck);
$this->setData('checked', $checked);
$this->setData('currentSkinType', $currentSkinType);
 
 
}
}
 
변경 후MobileConfigController.php
use Framework\Enum\ExternalUrl;
use Exception;
use Origin\Enum\Design\DesignEditorSkinType;
use Origin\Service\MyApp\MyappSettingService;
use Request;
 
/**
$designSkinConfig = gd_policy('design.skin');
$currentSkinType = $designSkinConfig['skinType'] ?? DesignEditorSkinType::ADAPTIVE->value;
 
// 마이앱 상태 조회
try {
$myappSettingService = \App::getInstance(MyappSettingService::class);
$myappStatus = $myappSettingService->getMyappStatus();
$isMyappInstalled = $myappStatus->isInstalled();
$isMyappReleased = $myappStatus->isReleased();
} catch (\Throwable $e) {
$isMyappInstalled = false;
$isMyappReleased = false;
}
 
//--- 관리자 디자인 템플릿
$this->setData('data', $data);
$this->setData('browserCheck', $browserCheck);
$this->setData('checked', $checked);
$this->setData('currentSkinType', $currentSkinType);
$this->setData('isMyappInstalled', $isMyappInstalled);
$this->setData('isMyappReleased', $isMyappReleased);
}
}
 
Controller/Front/Intro/AdultController.php+21-1
변경 전AdultController.php
use Framework\Debug\Exception\AlertOnlyException;
use Globals;
use Origin\Service\MyApp\MyappAuth;
 
use Origin\Service\MyApp\MyappUtil;
use Request;
use Session;
*/
public function index()
{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$scripts = ['gd_payco.js'];
try {
/** @var \Bundle\Controller\Front\Controller $this */
$request = \App::getInstance('request');
$returnUrl = MemberUtil::getLoginReturnURL();
$siteLink = new SiteLink();
$this->setData('loginActionUrl', $siteLink->link('../member/member_ps.php', 'ssl'));
 
변경 후AdultController.php
use Framework\Debug\Exception\AlertOnlyException;
use Globals;
use Origin\Service\MyApp\MyappAuth;
use Origin\Service\MyApp\MyappBridge;
use Origin\Service\MyApp\MyappUtil;
use Request;
use Session;
*/
public function index()
{
$request = \App::getInstance('request');
if ($request->isFromMyapp() && !MemberUtil::isLogin()) {
$returnUrl = $request->get()->get('returnUrl', $request->getReferer());
if (!empty($returnUrl)) {
$returnUrl = MyappUtil::getUri($returnUrl);
}
$isQuickLoginEnabled = MyappUtil::isQuickLoginEnabled();
\Logger::channel('myapp')->info("Myapp AdultController add loginView isQuickLoginEnabled: " . ($isQuickLoginEnabled ? 'true' : 'false'));
 
$myappBridge = \App::load(MyappBridge::class);
$loginViewScript = $myappBridge->loginView($returnUrl, 'ONLY_ADULT');
 
if ($isQuickLoginEnabled) {
$this->js($loginViewScript);
exit;
}
 
echo $myappBridge->wrapScriptTag($loginViewScript);
}
 
$scripts = ['gd_payco.js'];
try {
/** @var \Bundle\Controller\Front\Controller $this */
 
$returnUrl = MemberUtil::getLoginReturnURL();
$siteLink = new SiteLink();
$this->setData('loginActionUrl', $siteLink->link('../member/member_ps.php', 'ssl'));
 
Controller/Front/Intro/MemberController.php+38-2
변경 전MemberController.php
use Component\Godo\GodoWonderServerApi;
use Component\SiteLink\SiteLink;
use Framework\Debug\Exception\AlertOnlyException;
 
 
 
use Request;
 
/**
$request = \App::getInstance('request');
$logger = \App::getInstance('logger');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$scripts = ['gd_payco.js'];
try {
if ($request->request()->has('returnUrl')) {
$facebook = new Facebook();
$scripts[] = 'gd_sns.js';
if ($snsLoginPolicy->useGodoAppId()) {
$this->setData('facebookUrl', $facebook->getGodoLoginUrl($returnUrl));
} else {
$this->setData('facebookUrl', $facebook->getLoginUrl($returnUrl));
}
 
 
 
 
 
 
 
 
 
}
$naverLoginPolicy = new NaverLoginPolicy();
$useNaver = $naverLoginPolicy->useNaverLogin();
$useGoogleLogin = $googlePolicy->useGoogleLogin();
if ($useGoogleLogin) {
$scripts[] = 'gd_google.js';
 
 
 
 
 
 
 
 
}
$this->setData('useGoogleLogin', $useGoogleLogin);
 
 
변경 후MemberController.php
use Component\Godo\GodoWonderServerApi;
use Component\SiteLink\SiteLink;
use Framework\Debug\Exception\AlertOnlyException;
use Origin\Service\MyApp\MyappAuth;
use Origin\Service\MyApp\MyappBridge;
use Origin\Service\MyApp\MyappUtil;
use Request;
 
/**
$request = \App::getInstance('request');
$logger = \App::getInstance('logger');
 
if ($request->isFromMyapp() && !MemberUtil::isLogin()) {
$isQuickLoginEnabled = MyappUtil::isQuickLoginEnabled();
\Logger::channel('myapp')->info("Myapp MemberController add loginView isQuickLoginEnabled: " . ($isQuickLoginEnabled ? 'true' : 'false'));
 
$returnUrl = $request->getReferer();
$myappBridge = \App::load(MyappBridge::class);
$loginViewScript = $myappBridge->loginView($returnUrl, 'ONLY_MEMBER', false, true);
 
if ($isQuickLoginEnabled) {
$this->js($loginViewScript);
exit;
}
 
echo $myappBridge->wrapScriptTag($loginViewScript);
}
 
$scripts = ['gd_payco.js'];
try {
if ($request->request()->has('returnUrl')) {
$facebook = new Facebook();
$scripts[] = 'gd_sns.js';
if ($snsLoginPolicy->useGodoAppId()) {
$facebookUrl = $facebook->getGodoLoginUrl($returnUrl);
} else {
$facebookUrl = $facebook->getLoginUrl($returnUrl);
}
 
$userAgent = $request->server()->get('HTTP_USER_AGENT');
if ($request->isFromMyapp() && MyappUtil::isAndroid($userAgent)) {
$tokenData = ['next' => $returnUrl];
$token = MyappUtil::encryptCustomTabToken($tokenData);
$facebookUrl = MyappUtil::getCustomTabUrl('facebook', MyappAuth::CUSTOM_TAB_LOGIN_ACTIVE, $token);
}
 
$this->setData('facebookUrl', $facebookUrl);
}
$naverLoginPolicy = new NaverLoginPolicy();
$useNaver = $naverLoginPolicy->useNaverLogin();
$useGoogleLogin = $googlePolicy->useGoogleLogin();
if ($useGoogleLogin) {
$scripts[] = 'gd_google.js';
 
$googleReturnUrl = urlencode($returnUrl);
if ($request->isFromMyapp()) {
$tokenData = ['next' => $returnUrl];
$token = MyappUtil::encryptCustomTabToken($tokenData);
$googleReturnUrl = MyappUtil::getCustomTabUrl('google', MyappAuth::CUSTOM_TAB_LOGIN_ACTIVE, $token);
}
$this->setData('googleReturnUrl', $googleReturnUrl);
}
$this->setData('useGoogleLogin', $useGoogleLogin);
 
 
Controller/Front/Member/Facebook/JoinCallbackController.php+1-1
변경 전JoinCallbackController.php
$solutionAuthenticationKey = $myappAuth->createAuthenticationKey($memberData);
 
$myappBridge = \App::load(MyappBridge::class);
$this->js($myappBridge->login($memberData, $solutionAuthenticationKey, $request->getReferer(), URI_MOBILE, $snsProvider));
exit;
}
 
 
변경 후JoinCallbackController.php
$solutionAuthenticationKey = $myappAuth->createAuthenticationKey($memberData);
 
$myappBridge = \App::load(MyappBridge::class);
$this->js($myappBridge->login($memberData, $solutionAuthenticationKey, $request->getReferer(), MyappUtil::getHomeUrl(), $snsProvider));
exit;
}
 
 
Controller/Front/Member/Facebook/LoginCallbackController.php+1-1
변경 전LoginCallbackController.php
$errorReason = $request->get()->get('error_reason');
// 최초 로그인 및 회원 가입 시, 약관 페이지에서 취소 버튼 클릭 시 홈으로 이동 처리 (페이지 루프 이슈 개선)
if ($error == 'access_denied' && $errorReason == 'user_denied') {
$redirectUrl = URI_MOBILE;
}
}
throw new AlertRedirectException($e->getMessage(), $e->getCode(), $e, $redirectUrl, 'parent');
 
변경 후LoginCallbackController.php
$errorReason = $request->get()->get('error_reason');
// 최초 로그인 및 회원 가입 시, 약관 페이지에서 취소 버튼 클릭 시 홈으로 이동 처리 (페이지 루프 이슈 개선)
if ($error == 'access_denied' && $errorReason == 'user_denied') {
$redirectUrl = MyappUtil::getHomeUrl();
}
}
throw new AlertRedirectException($e->getMessage(), $e->getCode(), $e, $redirectUrl, 'parent');
 
Controller/Front/Member/Google/GoogleLoginController.php+4-5
변경 전GoogleLoginController.php
 
// 되돌아갈 URL
$isMobile = $request->isMobile();
if (empty($sessionData)) {
$homeUrl = ($isMobile ? URI_MOBILE : URI_HOME);
} else {
$sessionStateCode = $sessionData[GoogleLoginService::GOOGLE_STATE_CODE];
$globalMallPath = $sessionData['mallName'] ? $sessionData['mallName'] . DS : '';
$homeUrl = ($isMobile ? URI_MOBILE : URI_HOME) . $globalMallPath;
}
 
// 연동 팝업 사용자 취소
if (strpos($nextUrl, '../') !== false) {
$nextUrl = preg_replace('#(\.\./)+#', '', $nextUrl);
}
$nextUrl = urlencode(URI_MOBILE . ltrim($nextUrl));
}
MemberUtil::logoutWithCookie();
$this->js($myappBridge->schemeCloseCustomTabs($scheme, 'google', $message, $nextUrl));
 
변경 후GoogleLoginController.php
 
// 되돌아갈 URL
$isMobile = $request->isMobile();
$homeUrl = ($isMobile ? URI_MOBILE : $request->getDomainUrl() . '/');
if (!empty($sessionData)) {
 
$sessionStateCode = $sessionData[GoogleLoginService::GOOGLE_STATE_CODE];
$globalMallPath = $sessionData['mallName'] ? $sessionData['mallName'] . DS : '';
$homeUrl = $homeUrl . $globalMallPath;
}
 
// 연동 팝업 사용자 취소
if (strpos($nextUrl, '../') !== false) {
$nextUrl = preg_replace('#(\.\./)+#', '', $nextUrl);
}
$nextUrl = urlencode(MyappUtil::getUri('/' . ltrim($nextUrl)));
}
MemberUtil::logoutWithCookie();
$this->js($myappBridge->schemeCloseCustomTabs($scheme, 'google', $message, $nextUrl));
 
Controller/Front/Member/Kakao/KakaoLoginController.php+2-1
변경 전KakaoLoginController.php
use Origin\Service\Member\KakaoSync\KakaoSyncConnectService;
use Origin\Service\MyApp\MyappAuth;
use Origin\Service\MyApp\MyappBridge;
 
 
/**
* 카카오 로그인 및 회원가입
$logger->channel('kakaoLogin')->info($request->get()->get('error_description'));
$defaultRedirectUrl = '../../mypage/my_page.php';
if ($request->isFromMyapp()) {
$defaultRedirectUrl = URI_MOBILE;
}
$js="
if (window.opener === null || Object.keys(window.opener).indexOf('" . $functionName . "') < 0) {
 
변경 후KakaoLoginController.php
use Origin\Service\Member\KakaoSync\KakaoSyncConnectService;
use Origin\Service\MyApp\MyappAuth;
use Origin\Service\MyApp\MyappBridge;
use Origin\Service\MyApp\MyappUtil;
 
/**
* 카카오 로그인 및 회원가입
$logger->channel('kakaoLogin')->info($request->get()->get('error_description'));
$defaultRedirectUrl = '../../mypage/my_page.php';
if ($request->isFromMyapp()) {
$defaultRedirectUrl = MyappUtil::getHomeUrl();
}
$js="
if (window.opener === null || Object.keys(window.opener).indexOf('" . $functionName . "') < 0) {
 
Controller/Front/Member/LoginController.php+35
변경 전LoginController.php
use Component\SiteLink\SiteLink;
use Framework\Debug\Exception\AlertBackException;
use Origin\Service\MyApp\MyappAuth;
 
use Origin\Service\MyApp\MyappUtil;
use Validation;
 
$this->setData('orderNoMaxLength', 16);
$this->setData('isMyapp', $request->isMyapp());
$this->addScript($scripts);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
} catch (\Exception $e) {
throw new AlertBackException($e->getMessage());
}
 
변경 후LoginController.php
use Component\SiteLink\SiteLink;
use Framework\Debug\Exception\AlertBackException;
use Origin\Service\MyApp\MyappAuth;
use Origin\Service\MyApp\MyappBridge;
use Origin\Service\MyApp\MyappUtil;
use Validation;
 
$this->setData('orderNoMaxLength', 16);
$this->setData('isMyapp', $request->isMyapp());
$this->addScript($scripts);
 
if ($request->isFromMyapp()) {
\Logger::channel('myapp')->info("Myapp add loginView(NONE) returnUrl is : " . $returnUrl);
 
$loginViewType = 'NONE';
$showGuestOrder = false;
$loginViewReferer = $returnUrl;
if (strpos($loginViewReferer, '/order/order.php')) {
$session = \App::getInstance('session');
if (!$session->has('guest')) {
$showGuestOrder = true;
}
 
if (strpos($loginViewReferer, '?') !== false) {
$loginViewReferer .= '&myappGuestOrder=y';
} else {
$loginViewReferer .= '?myappGuestOrder=y';
}
}
 
\Logger::channel('myapp')->info("Myapp add loginView(NONE) bridge script and referer : " . $loginViewReferer);
$isQuickLoginEnabled = MyappUtil::isQuickLoginEnabled();
\Logger::channel('myapp')->info("Myapp LoginController add loginView isQuickLoginEnabled: " . ($isQuickLoginEnabled ? 'true' : 'false'));
$skipBack = !$isQuickLoginEnabled;
$myappBridge = \App::load(MyappBridge::class);
$loginViewScript = $myappBridge->loginView($loginViewReferer, $loginViewType, $showGuestOrder, $skipBack);
 
if ($isQuickLoginEnabled) {
$this->js($loginViewScript);
exit;
}
 
echo $myappBridge->wrapScriptTag($loginViewScript);
}
} catch (\Exception $e) {
throw new AlertBackException($e->getMessage());
}
 
Controller/Front/Member/LogoutController.php+8
변경 전LogoutController.php
use Component\Member\Util\MemberUtil;
use Framework\Debug\Exception\AlertRedirectException;
use function GuzzleHttp\Psr7\str;
 
use Validation;
 
/**
$request = \App::getInstance('request');
$logger = \App::getInstance('logger');
 
 
 
 
 
 
 
 
$returnUrl = $request->get()->get('returnUrl', $request->post()->get('returnUrl'));
 
// returnUrl 데이타 타입 체크
 
변경 후LogoutController.php
use Component\Member\Util\MemberUtil;
use Framework\Debug\Exception\AlertRedirectException;
use function GuzzleHttp\Psr7\str;
use Origin\Service\MyApp\MyappBridge;
use Validation;
 
/**
$request = \App::getInstance('request');
$logger = \App::getInstance('logger');
 
if ($request->isFromMyapp()) {
MemberUtil::logoutWithCookie();
$myappBridge = \App::load(MyappBridge::class);
$this->js($myappBridge->logout());
exit;
}
 
$returnUrl = $request->get()->get('returnUrl', $request->post()->get('returnUrl'));
 
// returnUrl 데이타 타입 체크
 
Controller/Front/Member/MemberPsController.php+4
변경 전MemberPsController.php
use Framework\Utility\ComponentUtils;
use Framework\Utility\StringUtils;
use Origin\Exception\Member\KakaoSync\KakaoSyncException;
 
use Origin\Service\Oauth\Google\GoogleLoginService;
use Origin\Service\Statistics\Analytics\Member\MemberJoinCompleteAnalyticsCollectorService;
use Origin\Service\Member\KakaoSync\KakaoSyncJoinService;
/** @var KakaoLoginPolicy $kakaoLoginPolicy */
if (\App::getInstance(KakaoLoginPolicy::class)->useKakaoSync() && !empty($kakaoProfile)) {
$this->loginBySns($kakaoProfile['id'], $returnUrl ?? '');
 
 
 
}
 
$this->json(['result' => 'success', 'returnUrl' => $returnUrl]);
 
변경 후MemberPsController.php
use Framework\Utility\ComponentUtils;
use Framework\Utility\StringUtils;
use Origin\Exception\Member\KakaoSync\KakaoSyncException;
use Origin\Service\MyApp\MyappAuth;
use Origin\Service\Oauth\Google\GoogleLoginService;
use Origin\Service\Statistics\Analytics\Member\MemberJoinCompleteAnalyticsCollectorService;
use Origin\Service\Member\KakaoSync\KakaoSyncJoinService;
/** @var KakaoLoginPolicy $kakaoLoginPolicy */
if (\App::getInstance(KakaoLoginPolicy::class)->useKakaoSync() && !empty($kakaoProfile)) {
$this->loginBySns($kakaoProfile['id'], $returnUrl ?? '');
if ($request->isFromMyapp()) {
$session->set(MyappAuth::MYAPP_KAKAO_SYNC_AUTO_LOGIN, true);
}
}
 
$this->json(['result' => 'success', 'returnUrl' => $returnUrl]);
 
Controller/Front/Member/Naver/NaverLoginController.php+2-2
변경 전NaverLoginController.php
$solutionAuthenticationKey = $myappAuth->createAuthenticationKey($memberData);
 
if (StringUtils::contains($referer, 'join_method') || $request->get()->get('naverType', '') == 'join_method') {
$nextUrl = URI_MOBILE;
} else {
$nextUrl = MemberUtil::getLoginReturnURL();
}
$errorDescription = $request->get()->get('error_description');
// 최초 로그인 및 회원 가입 시, 약관 페이지에서 취소 버튼 클릭 시 홈으로 이동 처리 (페이지 루프 이슈 개선)
if ($error == 'access_denied' && $errorDescription == 'Canceled By User') {
$redirectUrl = URI_MOBILE;
}
}
throw new AlertRedirectException($e->getMessage(), null, null, $redirectUrl);
 
변경 후NaverLoginController.php
$solutionAuthenticationKey = $myappAuth->createAuthenticationKey($memberData);
 
if (StringUtils::contains($referer, 'join_method') || $request->get()->get('naverType', '') == 'join_method') {
$nextUrl = MyappUtil::getHomeUrl();
} else {
$nextUrl = MemberUtil::getLoginReturnURL();
}
$errorDescription = $request->get()->get('error_description');
// 최초 로그인 및 회원 가입 시, 약관 페이지에서 취소 버튼 클릭 시 홈으로 이동 처리 (페이지 루프 이슈 개선)
if ($error == 'access_denied' && $errorDescription == 'Canceled By User') {
$redirectUrl = MyappUtil::getHomeUrl();
}
}
throw new AlertRedirectException($e->getMessage(), null, null, $redirectUrl);
 
Controller/Front/Member/WakeCompleteController.php+4-4
변경 전WakeCompleteController.php
$snsProvider = $memberSnsData['snsTypeFl'];
}
 
$this->js($myappBridge->login($memberData, $solutionAuthenticationKey, $request->getReferer(), URI_MOBILE, $snsProvider));
} else if (MyappUtil::isAndroid($userAgent) && $memberSnsData['snsTypeFl'] == 'facebook' && $session->has(MyappAuth::MYAPP_SCHEME)) {
$myappBridge = \App::load(MyappBridge::class);
$myappAuth = App::load(MyappAuth::class);
$encryptor = \App::getInstance('encryptor');
$tokenData = [
"memNo" => (int)$memberData['memNo'],
"next" => $session->get(MyappAuth::MYAPP_CUSTOM_TAB_LOGIN_NEXT_URL) ?? URI_MOBILE
];
$authToken = base64_encode($encryptor->encrypt($tokenData));
$nextUrl = MyappUtil::getMobileUri('/myapp/myapp_auth.php?customTabsAuthToken=' . $authToken);
 
$bridge = $myappBridge->getLoginParams($memberData, $solutionAuthenticationKey, $request->getReferer(), '', 'facebook');
$params = [
$scheme = $session->get(MyappAuth::MYAPP_SCHEME);
$tokenData = [
"memNo" => (int)$memberData['memNo'],
"next" => $session->get(MyappAuth::MYAPP_CUSTOM_TAB_LOGIN_NEXT_URL) ?? URI_MOBILE
];
$authToken = MyappUtil::encryptCustomTabToken($tokenData);
$nextUrl = MyappUtil::getCustomTabUrl($provider, MyappAuth::CUSTOM_TAB_LOGIN, $authToken);
 
변경 후WakeCompleteController.php
$snsProvider = $memberSnsData['snsTypeFl'];
}
 
$this->js($myappBridge->login($memberData, $solutionAuthenticationKey, $request->getReferer(), MyappUtil::getHomeUrl(), $snsProvider));
} else if (MyappUtil::isAndroid($userAgent) && $memberSnsData['snsTypeFl'] == 'facebook' && $session->has(MyappAuth::MYAPP_SCHEME)) {
$myappBridge = \App::load(MyappBridge::class);
$myappAuth = App::load(MyappAuth::class);
$encryptor = \App::getInstance('encryptor');
$tokenData = [
"memNo" => (int)$memberData['memNo'],
"next" => $session->get(MyappAuth::MYAPP_CUSTOM_TAB_LOGIN_NEXT_URL) ?? MyappUtil::getHomeUrl()
];
$authToken = base64_encode($encryptor->encrypt($tokenData));
$nextUrl = MyappUtil::getUri('/myapp/myapp_auth.php?customTabsAuthToken=' . $authToken);
 
$bridge = $myappBridge->getLoginParams($memberData, $solutionAuthenticationKey, $request->getReferer(), '', 'facebook');
$params = [
$scheme = $session->get(MyappAuth::MYAPP_SCHEME);
$tokenData = [
"memNo" => (int)$memberData['memNo'],
"next" => $session->get(MyappAuth::MYAPP_CUSTOM_TAB_LOGIN_NEXT_URL) ?? MyappUtil::getHomeUrl()
];
$authToken = MyappUtil::encryptCustomTabToken($tokenData);
$nextUrl = MyappUtil::getCustomTabUrl($provider, MyappAuth::CUSTOM_TAB_LOGIN, $authToken);
 
Controller/Front/Mypage/MyPagePasswordController.php+9-1
변경 전MyPagePasswordController.php
{
public function index()
{
 
$session = \App::getInstance('session');
$scripts = ['gd_payco.js'];
$scripts[] = 'gd_naver.js';
$facebookReAuthenticationUrl =$facebook->getReAuthenticationUrl();
}
 
$request = \App::getInstance('request');
$userAgent = $request->server()->get('HTTP_USER_AGENT');
if ($request->isFromMyapp() && MyappUtil::isAndroid($userAgent)) {
$facebookReAuthenticationUrl = MyappUtil::getCustomTabsUrl('facebook', 're-authentication');
ArrayUtils::unsetDiff($joinField, ['memPw']);
ArrayUtils::unsetDiff($member, ['memId']);
 
 
 
 
 
 
 
 
 
$this->setData('joinField', $joinField);
$this->setData('data', $member);
$this->setData('usePayco', $usePayco);
 
변경 후MyPagePasswordController.php
{
public function index()
{
$request = \App::getInstance('request');
$session = \App::getInstance('session');
$scripts = ['gd_payco.js'];
$scripts[] = 'gd_naver.js';
$facebookReAuthenticationUrl =$facebook->getReAuthenticationUrl();
}
 
 
$userAgent = $request->server()->get('HTTP_USER_AGENT');
if ($request->isFromMyapp() && MyappUtil::isAndroid($userAgent)) {
$facebookReAuthenticationUrl = MyappUtil::getCustomTabsUrl('facebook', 're-authentication');
ArrayUtils::unsetDiff($joinField, ['memPw']);
ArrayUtils::unsetDiff($member, ['memId']);
 
 
$kakaoReturnUrl = '../mypage/my_page.php';
if ($request->isFromMyapp()) {
$kakaoReturnUrl = '/mypage/my_page.php';
}
$this->setData('kakaoReturnUrl', $kakaoReturnUrl);
 
 
$this->setData('joinField', $joinField);
$this->setData('data', $member);
$this->setData('usePayco', $usePayco);
 
Controller/Mobile/Intro/AdultController.php-20
변경 전AdultController.php
const DEPRECATED_PATH_MODULE_SCRIPT = "DEPRECATED_PATH_MODULE_SCRIPT";
public function index()
{
$request = \App::getInstance('request');
if ($request->isFromMyapp() && !MemberUtil::isLogin()) {
$returnUrl = $request->get()->get('returnUrl', $request->getReferer());
if (!empty($returnUrl)) {
$returnUrl = rtrim(URI_MOBILE, '/') . $returnUrl;
}
$isQuickLoginEnabled = MyappUtil::isQuickLoginEnabled();
\Logger::channel('myapp')->info("Myapp AdultController add loginView isQuickLoginEnabled: " . ($isQuickLoginEnabled ? 'true' : 'false'));
 
$myappBridge = \App::load(MyappBridge::class);
$loginViewScript = $myappBridge->loginView($returnUrl, 'ONLY_ADULT');
 
if ($isQuickLoginEnabled) {
$this->js($loginViewScript);
exit;
}
 
echo $myappBridge->wrapScriptTag($loginViewScript);
}
 
// 마이앱 로그인뷰 스크립트
$myappBuilderInfo = gd_policy('myapp.config')['builder_auth'];
$myappUseQuickLogin = gd_policy('myapp.config')['useQuickLogin'];
 
변경 후AdultController.php
const DEPRECATED_PATH_MODULE_SCRIPT = "DEPRECATED_PATH_MODULE_SCRIPT";
public function index()
{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// 마이앱 로그인뷰 스크립트
$myappBuilderInfo = gd_policy('myapp.config')['builder_auth'];
$myappUseQuickLogin = gd_policy('myapp.config')['useQuickLogin'];
 
Controller/Mobile/Member/LoginController.php-32
변경 전LoginController.php
$front = \App::load('\\Controller\\Front\\Member\\LoginController');
$front->index();
$this->setData($front->getData());
if ($request->isFromMyapp()) {
$referer = urldecode($front->getData('returnUrl'));
\Logger::channel('myapp')->info("Myapp add loginView(NONE) returnUrl is : " . $referer);
 
$loginViewType = 'NONE';
$showGuestOrder = false;
if (strpos($referer, '/order/order.php')) {
$session = \App::getInstance('session');
if (!$session->has('guest')) {
$showGuestOrder = true;
}
 
if (!empty($queryParams)) {
$referer .= '&myappGuestOrder=y';
} else {
$referer .= '?myappGuestOrder=y';
}
}
 
\Logger::channel('myapp')->info("Myapp add loginView(NONE) bridge script and referer : " . $referer);
$isQuickLoginEnabled = MyappUtil::isQuickLoginEnabled();
\Logger::channel('myapp')->info("Myapp LoginController add loginView isQuickLoginEnabled: " . ($isQuickLoginEnabled ? 'true' : 'false'));
$skipBack = !$isQuickLoginEnabled; // 퀵 로그인 사용 안함인 경우, history.back() 스킵 처리
$loginViewScript = $myappBridge->loginView($referer, $loginViewType, $showGuestOrder, $skipBack);
 
if ($isQuickLoginEnabled) {
$this->js($loginViewScript);
exit;
}
 
echo $myappBridge->wrapScriptTag($loginViewScript);
}
$scripts = ['gd_payco.js'];
if ($front->getData('useFacebookLogin') === true) {
$scripts[] = 'gd_sns.js';
 
변경 후LoginController.php
$front = \App::load('\\Controller\\Front\\Member\\LoginController');
$front->index();
$this->setData($front->getData());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$scripts = ['gd_payco.js'];
if ($front->getData('useFacebookLogin') === true) {
$scripts[] = 'gd_sns.js';
 
Controller/Mobile/Member/LogoutController.php-11
변경 전LogoutController.php
 
namespace Bundle\Controller\Mobile\Member;
 
use Bundle\Component\Member\Util\MemberUtil;
use Origin\Service\MyApp\MyappBridge;
 
/**
* Class 회원 로그아웃
* @package Bundle\Controller\Mobile\Member
*/
public function index()
{
$request = \App::getInstance('request');
if ($request->isFromMyapp()) {
MemberUtil::logoutWithCookie();
$myappBridge = \App::load(MyappBridge::class);
$this->js($myappBridge->logout());
exit;
}
 
/** @var \Bundle\Controller\Front\Member\LogoutController $front */
$front = \App::load('\\Controller\\Front\\Member\\LogoutController');
$front->index();
 
변경 후LogoutController.php
 
namespace Bundle\Controller\Mobile\Member;
 
 
 
 
/**
* Class 회원 로그아웃
* @package Bundle\Controller\Mobile\Member
*/
public function index()
{
 
 
 
 
 
 
 
 
/** @var \Bundle\Controller\Front\Member\LogoutController $front */
$front = \App::load('\\Controller\\Front\\Member\\LogoutController');
$front->index();