Rhymix AI로 코딩해봤네요 :)
강제로그인 기능을 AI로 구현해봤네요 :)
http://your-site.com/?mid=member&act=dispMemberForceLogin&user_id=example_user
잘되네요~~
memberView 클래스에 추가할 dispMemberForceLogin 메서드
function dispMemberForceLogin() {
$user_id = Context::get('user_id');
if(!$user_id) {
return new BaseObject(-1, 'msg_invalid_request');
}
$oMemberController = getController('member');
$output = $oMemberController->procMemberForceLogin($user_id);
if(!$output->toBool()) {
return $output;
}
$this->setMessage('success_forced_login');
$this->setRedirectUrl(getNotEncodedUrl('', 'mid', Context::get('mid'), 'act', ''));
}
$user_id = Context::get('user_id');
if(!$user_id) {
return new BaseObject(-1, 'msg_invalid_request');
}
$oMemberController = getController('member');
$output = $oMemberController->procMemberForceLogin($user_id);
if(!$output->toBool()) {
return $output;
}
$this->setMessage('success_forced_login');
$this->setRedirectUrl(getNotEncodedUrl('', 'mid', Context::get('mid'), 'act', ''));
}
memberController 클래스에 다음과 같은 procMemberForceLogin 메소드
function procMemberForceLogin($user_id) {
$args = new stdClass();
$args->user_id = $user_id;
// 사용자 정보 가져오기 (아이디/이메일/전화번호 중 어떤 것을 사용했는지 확인)
$config = MemberModel::getMemberConfig();
if (strpos($user_id, '@') !== false && (!$config->identifiers || in_array('email_address', $config->identifiers))) {
$member_info = MemberModel::getMemberInfoByEmailAddress($user_id);
} elseif (strpos($user_id, '@') === false && $config->identifiers && in_array('phone_number', $config->identifiers)) {
if(preg_match('/^\+([0-9-]+)\.([0-9.-]+)$/', $user_id, $matches)) {
$user_id = $matches[2];
$phone_country = $matches[1];
} elseif($config->phone_number_default_country) {
$phone_country = $config->phone_number_default_country;
}
if($phone_country && !preg_match('/^[A-Z]{3}$/', $phone_country)) {
$phone_country = Rhymix\Framework\i18n::getCountryCodeByCallingCode($phone_country);
}
$member_info = MemberModel::getMemberInfoByPhoneNumber($user_id, $phone_country);
} else {
$member_info = MemberModel::getMemberInfoByUserID($user_id);
}
if (!$member_info || !$member_info->member_srl) {
return new BaseObject(-1, 'msg_not_exists_member'); // 사용자 정보가 없을 경우 에러 반환
}
// 로그인 처리
$args->member_srl = $member_info->member_srl;
$output = executeQuery('member.updateLastLogin', $args);
self::clearMemberCache($args->member_srl);
// 세션 정보 설정
Rhymix\Framework\Session::login($member_info->member_srl);
$this->setSessionInfo();
return new BaseObject(0, 'success_forced_login');
}
$args = new stdClass();
$args->user_id = $user_id;
// 사용자 정보 가져오기 (아이디/이메일/전화번호 중 어떤 것을 사용했는지 확인)
$config = MemberModel::getMemberConfig();
if (strpos($user_id, '@') !== false && (!$config->identifiers || in_array('email_address', $config->identifiers))) {
$member_info = MemberModel::getMemberInfoByEmailAddress($user_id);
} elseif (strpos($user_id, '@') === false && $config->identifiers && in_array('phone_number', $config->identifiers)) {
if(preg_match('/^\+([0-9-]+)\.([0-9.-]+)$/', $user_id, $matches)) {
$user_id = $matches[2];
$phone_country = $matches[1];
} elseif($config->phone_number_default_country) {
$phone_country = $config->phone_number_default_country;
}
if($phone_country && !preg_match('/^[A-Z]{3}$/', $phone_country)) {
$phone_country = Rhymix\Framework\i18n::getCountryCodeByCallingCode($phone_country);
}
$member_info = MemberModel::getMemberInfoByPhoneNumber($user_id, $phone_country);
} else {
$member_info = MemberModel::getMemberInfoByUserID($user_id);
}
if (!$member_info || !$member_info->member_srl) {
return new BaseObject(-1, 'msg_not_exists_member'); // 사용자 정보가 없을 경우 에러 반환
}
// 로그인 처리
$args->member_srl = $member_info->member_srl;
$output = executeQuery('member.updateLastLogin', $args);
self::clearMemberCache($args->member_srl);
// 세션 정보 설정
Rhymix\Framework\Session::login($member_info->member_srl);
$this->setSessionInfo();
return new BaseObject(0, 'success_forced_login');
}
댓글 7
다만 본문대로라면 user_id 입력만으로 로그인하게 만드는 백도어가 되니; admin 전용액션으로 만들고 최소한의 검증절차를 추가해야 합니다.
보여주고 싶었던 것은 보안보다는 라이믹스 코드도 코딩하지 않고 코드를 프롬프트로 만들어서 적용해도 돌아간다 정도여서 :) 실제 사용시에는 보안적인 부분을 더 집어넣어서 사용하면 될거구요..당연히
AI시대에 라이믹스에 오는 커뮤니티 회원들도 더 늦기전에 AI 베이스로 갈아타셔야 한다 라는 메세지예요.