Add trigger before auto-login #2665 #2666

This commit is contained in:
Kijin Sung 2026-02-05 22:13:50 +09:00
parent 6d85d0de6d
commit 9d1738e21d
2 changed files with 42 additions and 14 deletions

View file

@ -380,7 +380,7 @@ class Session
self::$_autologin_key = self::_getAutologinKey(); self::$_autologin_key = self::_getAutologinKey();
if (!$member_srl && self::$_autologin_key) if (!$member_srl && self::$_autologin_key)
{ {
$member_srl = \MemberController::getInstance()->doAutologin(self::$_autologin_key); $member_srl = \MemberController::doAutoLogin(self::$_autologin_key);
if ($member_srl && self::isValid($member_srl)) if ($member_srl && self::isValid($member_srl))
{ {
self::login($member_srl, false); self::login($member_srl, false);

View file

@ -2387,7 +2387,7 @@ class MemberController extends Member
* @param string $autologin_key * @param string $autologin_key
* @return int|false * @return int|false
*/ */
function doAutologin($autologin_key = null) public static function doAutoLogin($autologin_key = null)
{ {
// Validate the key. // Validate the key.
if (strlen($autologin_key) == 48) if (strlen($autologin_key) == 48)
@ -2430,6 +2430,28 @@ class MemberController extends Member
return false; return false;
} }
// Get the member info and check it.
$member_info = MemberModel::getMemberInfo($output->data->member_srl);
if (!$member_info)
{
return false;
}
if (!empty($member_info->denied) && $member_info->denied === 'Y')
{
return false;
}
if (!empty($member_info->limit_date) && substr($member_info->limit_date, 0, 8) >= date('Ymd'))
{
return false;
}
// Call a trigger before auto-login.
$trigger_output = ModuleHandler::triggerCall('member.doAutoLogin', 'before', $member_info);
if (!$trigger_output->toBool())
{
return false;
}
// If the current security key matches, generate a new key. // If the current security key matches, generate a new key.
// If the previous key matches, don't update until the client has the current key. // If the previous key matches, don't update until the client has the current key.
// Resending the current key in this case will be handled by the Session class. // Resending the current key in this case will be handled by the Session class.
@ -2462,13 +2484,10 @@ class MemberController extends Member
} }
// Update the last login time. // Update the last login time.
executeQuery('member.updateLastLogin', (object)['member_srl' => $output->data->member_srl]); self::updateLastLogin($output->data->member_srl);
self::clearMemberCache($output->data->member_srl);
// Call a trigger after validate security key (after) // Call a trigger after validate security key.
$trigger_obj = new stdClass(); ModuleHandler::triggerCall('member.doAutoLogin', 'after', $member_info);
$trigger_obj->member_srl = $output->data->member_srl;
ModuleHandler::triggerCall('member.doAutoLogin', 'after', $trigger_obj);
// Return the member_srl. // Return the member_srl.
return intval($output->data->member_srl); return intval($output->data->member_srl);
@ -2640,11 +2659,6 @@ class MemberController extends Member
} }
} }
// Update the latest login time
$args->member_srl = $member_info->member_srl;
$output = executeQuery('member.updateLastLogin', $args);
self::clearMemberCache($args->member_srl);
// Check if there is recoding table. // Check if there is recoding table.
$oDB = DB::getInstance(); $oDB = DB::getInstance();
if($oDB->isTableExists('member_count_history') && $config->enable_login_fail_report != 'N') if($oDB->isTableExists('member_count_history') && $config->enable_login_fail_report != 'N')
@ -2702,6 +2716,7 @@ class MemberController extends Member
// Log in! // Log in!
Rhymix\Framework\Session::login($member_info->member_srl); Rhymix\Framework\Session::login($member_info->member_srl);
self::updateLastLogin($member_info->member_srl);
$this->setSessionInfo(); $this->setSessionInfo();
// Log out all other sessions if so configured. // Log out all other sessions if so configured.
@ -2716,10 +2731,23 @@ class MemberController extends Member
return $output; return $output;
} }
/**
* Update the last login timestamp of a member.
*
* @param int $member_srl
* @return object
*/
public static function updateLastLogin(int $member_srl)
{
$output = executeQuery('member.updateLastLogin', ['member_srl' => $member_srl]);
self::clearMemberCache($member_srl);
return $output;
}
/** /**
* Update or create session information * Update or create session information
*/ */
function setSessionInfo() public function setSessionInfo()
{ {
// If your information came through the current session information to extract information from the users // If your information came through the current session information to extract information from the users
$member_info = Rhymix\Framework\Session::getMemberInfo(true); $member_info = Rhymix\Framework\Session::getMemberInfo(true);