El PIN de seguridad
Un código de cuatro dígitos que la persona define una vez y escribe antes de acciones sensibles.
El PIN es un segundo secreto, más corto que la contraseña, que una persona escribe para confirmar una acción desde dentro de la aplicación. Viene apagado. Esta guía cubre cómo encenderlo, qué le pide a tus usuarios, cómo exigirlo desde tu propio código y cómo se restablece.
Qué es
Cuatro dígitos, exactamente. Se guarda con hash en la columna pin de users, con el mismo hash que la contraseña, así que no se puede leer de vuelta, ni siquiera desde el panel de administración. Definir un PIN con algo distinto de cuatro dígitos se rechaza con "El PIN debe ser de 4 dígitos", y un valor vacío deja intacto el PIN guardado.
Encenderlo
AUTH_ENABLE_PIN=true
Ese es todo el interruptor: enable_pin en config/auth.php, false por omisión. Cambian cuatro cosas:
- Aparece una tarjeta "PIN de seguridad" en el perfil en
/account, con el texto "Configura un PIN de 4 dígitos para confirmar tu identidad en acciones importantes." y el formulario para crearlo. - Toda persona con sesión y sin PIN ve una barra de aviso en la parte superior de la aplicación en cada página: "Necesitas configurar un PIN para tu cuenta." con un enlace "Configurar PIN" al perfil. La barra desaparece cuando el PIN se guarda. Mientras tanto nada se bloquea.
- El diálogo de confirmación que se describe abajo pide el PIN en lugar de la contraseña.
- El formulario de usuario del panel de administración gana un campo "Pin" y una acción "Restablecer PIN".
Apagarlo oculta todo eso. Los PIN guardados se conservan y simplemente se ignoran.
Qué hace la persona
En la tarjeta "PIN de seguridad", cuatro casillas bajo "Crear PIN" y cuatro bajo "Confirmar PIN", un dígito cada una, y un botón "Crear PIN". Cuando ya existe un PIN, la tarjeta pide el "PIN actual" antes de un "Nuevo PIN" y deja actualizarlo. No hay un camino de "olvidé mi PIN": un PIN perdido lo restablece un administrador. La tarjeta, con el resto del perfil, se describe en /help/your-account-area.
Exigir el PIN desde tu propio código
El kit te da un diálogo de confirmación que abres desde cualquier componente Livewire con el trait App\Traits\ConfirmsUserActions:
use App\Traits\ConfirmsUserActions;
use Livewire\Component;
class CloseProject extends Component
{
use ConfirmsUserActions;
public function close(int $projectId)
{
$this->requiresUserConfirmation('performClose', ['projectId' => $projectId]);
}
public function performClose($user, int $projectId)
{
// Corre sólo después de confirmar el PIN, o la contraseña.
// $user es el App\Models\User confirmado.
}
}
requiresUserConfirmation($method, $params) abre la ventana modal "Confirmar acción". Lo que pide depende de la configuración y de la persona:
| Situación | Campo |
|---|---|
AUTH_ENABLE_PIN=true y la persona tiene PIN |
"PIN", cuatro dígitos |
AUTH_ENABLE_PIN=true y la persona aún no tiene PIN |
"Contraseña" |
AUTH_ENABLE_PIN=false |
"Contraseña" |
Así que el PIN protege una acción sólo para quienes lo definieron; hasta entonces la contraseña hace el trabajo. Al confirmar, la ventana cierra y tu $method se llama con el usuario confirmado primero y tus $params después, en orden. Un valor equivocado responde "Credenciales inválidas." y la ventana sigue abierta. Cancelar la cierra y nada corre.
La ventana también funciona para un visitante sin sesión: entonces agrega un campo de identidad etiquetado con las identidades de LOGIN_IDENTITIES, por ejemplo "correo electrónico / teléfono", busca la cuenta y pide el PIN cuando la función está encendida, o la contraseña en caso contrario.
Hoy ninguna pantalla del kit abre este diálogo por sí misma. Está ahí para las acciones de tu aplicación.
El trait App\Traits\HasPin
El modelo User lleva el trait; llama estos métodos sobre cualquier usuario:
| Método | Devuelve |
|---|---|
hasPin() |
true cuando hay un PIN guardado |
requiresPin() |
true cuando la función está encendida y esta persona aún no tiene PIN; la condición detrás de la barra de aviso |
validatePin(string $pin) |
true cuando $pin coincide con el hash guardado; false cuando no hay nada guardado |
resetPin() |
Borra el PIN y muestra "El PIN del usuario ha sido restablecido correctamente." |
Definir el PIN es una asignación simple; el trait lo hashea y exige los cuatro dígitos:
$user->pin = '1234';
$user->save();
Restablecer un PIN
- La persona: desde la tarjeta "PIN de seguridad", con el PIN actual.
- Un administrador: en
/admin/users, la página del usuario tiene una acción "Restablecer PIN", con icono de llave, que borra el PIN; la persona vuelve a la barra de aviso y crea uno nuevo. El formulario de usuario también tiene un campo "Pin", vacío en cada carga porque el hash nunca se muestra: escribe cuatro dígitos para definir un PIN nuevo para la cuenta, déjalo vacío para conservar el actual. Ambos aparecen sólo mientrasAUTH_ENABLE_PIN=true, y la acción sólo para el roladmin. - Tu código:
$user->resetPin().