Estoy tratando de crear una página de inicio de sesión / registro que almacena el valor en el llavero y estoy tratando de almacenar el token JWT mientras inicia sesión en el dispositivo y la clave pública se almacena en el lado del servidor, la tienda de clave privada en el lado del cliente solicitará datos biométricos y llevar a la página de inicio.
Inicio de sesión.tsx
const login: SubmitHandler<ILoginValues> = async ({email, password}) => { try { const res = await fetch(`${config.apiUrl}/api/login`, { method: 'POST', body: JSON.stringify({ email, password, }), }); if (res.ok) { await setGenericPassword(email, password, CREDENTIALS_STORAGE_OPTIONS); setUser({isLoggedIn: true, hasSessionExpired: false}); toast.setToast({message: 'Login has succeeded', visible: true}); } } catch (error) { toast.setToast({message: 'Login failed', visible: true}); } };Parte del mango biométrico
const handleBiometricsLogin = useCallback(async () => { if (!user?.hasSessionExpired) { toast.setToast({message: 'No expired session'}); return; } try { const credentials = await getGenericPassword(CREDENTIALS_STORAGE_OPTIONS); console.log({credentials}); if (!credentials) { return; } const res = await fetch(`${config.apiUrl}/api/login`, { method: 'POST', body: JSON.stringify({ email: credentials.username, password: credentials.password, }), }); if (res.ok) { setUser({isLoggedIn: true, hasSessionExpired: false}); toast.setToast({ message: 'Login with biometrics has succeeded', visible: true, }); } } catch (error) { toast.setToast({message: 'Login with biometrics failed'}); } }, [setUser, toast, user?.hasSessionExpired]);Requisitos
Cuando un usuario se registra en biometría, se genera un par de claves. La clave privada se almacena de forma segura en el dispositivo y la clave pública se envía a un servidor para su registro. Cuando el usuario desea autenticarse, se le solicita la biometría, que desbloquea la clave privada almacenada de forma segura. Luego se genera una firma criptográfica y se envía al servidor para su verificación. A continuación, el servidor verifica la firma. Si la verificación fue exitosa, el servidor devuelve una respuesta apropiada y autoriza al usuario.