usePinAuth
Hook principal que orquesta todo el flujo de autenticación por PIN.
Uso
import { usePinAuth } from "@camarauth/sdk/react";
function LoginComponent() {
const auth = usePinAuth({
apiUrl: "http://localhost:3001",
whatsappNumber: "+1234567890",
onSuccess: (user) => console.log("Autenticado:", user),
});
// Usar auth...
}
Parámetros
Opciones de configuración
PinAuthOptions
URL del backend de Camarauth
Número de WhatsApp para enviar el PIN
Longitud del PIN a generar
Segundos antes de que expire el PIN
Máximo de regeneraciones automáticas
Generar PIN automáticamente al conectar
Prefijo del mensaje de WhatsApp
onPinGenerated
(pin: string, emojis: string[]) => void
Callback cuando se genera un PIN
Callback cuando la autenticación es exitosa
onError
(error: CamarauthError) => void
Callback cuando hay un error
Callback cuando el PIN expira
onMaxRegenerationsReached
Callback cuando se alcanza el máximo de regeneraciones
Valor de retorno
Retorna un objeto PinAuthState:
PIN como string de emojis
Tiempo formateado (MM:SS)
hasReachedMaxRegenerations
Si se alcanzó el máximo
Estado actual: ‘idle’ | ‘polling’ | ‘success’ | ‘error’ | ‘expired’
Si está cargando o conectando
Datos del usuario autenticado
Link de WhatsApp con mensaje
Mensaje completo para WhatsApp
Métodos
Cancelar autenticación actual
Ejemplo completo
import { usePinAuth } from "@camarauth/sdk/react";
function LoginPage() {
const auth = usePinAuth({
apiUrl: "http://localhost:3001",
whatsappNumber: "+1234567890",
onSuccess: (user) => {
// Redirigir al dashboard
window.location.href = "/dashboard";
},
onError: (error) => {
console.error("Error:", error.message);
},
});
if (auth.status === "success") {
return <div>¡Bienvenido, {auth.user?.name}!</div>;
}
return (
<div className="login-container">
<h1>Iniciar sesión</h1>
{!auth.pin ? (
<button onClick={auth.generate} disabled={auth.isLoading}>
{auth.isLoading ? "Conectando..." : "Generar código"}
</button>
) : (
<div className="auth-display">
<div className="emojis">
{auth.emojis.map((emoji, i) => (
<span key={i} className="emoji">
{emoji}
</span>
))}
</div>
<p>Expira en: {auth.formattedTime}</p>
{auth.qrCodeUrl && (
<img
src={auth.qrCodeUrl}
alt="Escanear para WhatsApp"
className="qr-code"
/>
)}
<a
href={auth.whatsappLink}
target="_blank"
rel="noopener noreferrer"
className="whatsapp-btn"
>
Abrir WhatsApp
</a>
<button onClick={auth.cancel}>Cancelar</button>
</div>
)}
{auth.error && <div className="error">{auth.error.message}</div>}
</div>
);
}
Véase también