ACTION
FO
Desde 1.5
actionAuthentication
~3 min de lectura
#Descripcion
Se ejecuta cada vez que un cliente inicia sesion exitosamente en el front office. Permite registrar accesos, actualizar datos de ultima conexion, sincronizar sesiones con sistemas externos o implementar logica de seguridad como deteccion de accesos sospechosos.
Disparado por
-
AuthController::processSubmitLogin()— controllers/front/AuthController.php
#Parametros
| Nombre | Tipo | Requerido | Descripcion |
|---|---|---|---|
| $customer | Customer | Si | Objeto Customer del cliente que acaba de iniciar sesion |
Retorno
void
Este hook no espera valor de retorno
#Ejemplo de codigo
mymodule.php
php
<?php
public function install()
{
return parent::install()
&& $this->registerHook('actionAuthentication');
}
mymodule.php
php
<?php
/**
* Hook actionAuthentication — cliente inicia sesion
*/
public function hookActionAuthentication(array $params)
{
/** @var Customer $customer */
$customer = $params['customer'];
// Ejemplo: Registrar log de acceso con IP y user-agent
$ip = Tools::getRemoteAddr();
$userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
Db::getInstance()->insert('mymodule_login_log', [
'id_customer' => (int) $customer->id,
'email' => pSQL($customer->email),
'ip_address' => pSQL($ip),
'user_agent' => pSQL(substr($userAgent, 0, 255)),
'date_add' => date('Y-m-d H:i:s'),
]);
// Ejemplo: Detectar login desde nueva IP (seguridad)
$knownIPs = Db::getInstance()->executeS(
'SELECT DISTINCT ip_address FROM `' . _DB_PREFIX_ . 'mymodule_login_log`
WHERE id_customer = ' . (int) $customer->id . '
AND ip_address != "' . pSQL($ip) . '"
ORDER BY date_add DESC LIMIT 10'
);
if (!empty($knownIPs)) {
$known = array_column($knownIPs, 'ip_address');
if (!in_array($ip, $known) && count($known) > 0) {
// Nueva IP detectada — enviar alerta al cliente
Mail::send(
(int) $customer->id_lang,
'new_login_alert',
Mail::l('Nuevo acceso a tu cuenta'),
['customer_name' => $customer->firstname, 'ip' => $ip],
$customer->email,
$customer->firstname . ' ' . $customer->lastname,
null,
null,
null,
null,
_PS_MODULE_DIR_ . $this->name . '/mails/'
);
}
}
}
#Notas y gotchas
- ⚠️ Este hook solo se dispara en login exitoso — no en intentos fallidos.
- ⚠️ Solo se ejecuta en el front office. Para el back office no existe un hook equivalente directo.
- ⚠️ El cliente ya esta autenticado cuando se ejecuta el hook — la sesion esta activa.
- ⚠️ No confundir con `actionCustomerAccountAdd` que es solo para nuevos registros.
- ⚠️ En PS 1.7+ con el checkout de un paso, el login puede ocurrir durante el proceso de compra.
#Relacionados
#Historial de versiones
| Version PS | Cambio |
|---|---|
| 1.5 | Introducido con el parametro customer |
| 1.7 | Sin cambios. Compatible con PS 1.7, 8.x y 9.x |
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.