Cuando el usuario hace clic en el botón "iniciar sesión" y si user.challangeName === 'NEW_PASSWORD_REQUIRED' es verdadero, redirijo al usuario a una página (pantalla de formulario) donde puede proporcionar la entrada para los atributos requeridos y una nueva contraseña . Incluso aunque el objeto de usuario se complete al hacer clic en el botón de inicio de sesión, al usar Auth.currentsession en la pantalla del formulario se imprimirá "No se encontró ningún usuario".
¿Alguien puede decirme por qué no veo ningún usuario? ¿Qué estoy haciendo mal aquí?
Aquí está mi función de inicio de sesión (activada cuando se hace clic en el botón de inicio de sesión) donde dirijo al usuario a la pantalla de cambio de contraseña (pantalla de formulario) si user.challangeName === 'NEW_PASSWORD_REQUIRED' es verdadero.
const login = async (email, password) => { try { const user = await Auth.signIn(email, password); if (user.challengeName === 'NEW_PASSWORD_REQUIRED') { navigate('/change-password'); return; } if (user) { setToken(user.signInUserSession.idToken.jwtToken); const userDetails = await getAccountDetails(); dispatch({ type: LOGIN, payload: { user: { attributes: user.attributes, username: user.username }, client: userDetails } }); } } catch (error) { await logout(); throw error; } };Aquí está mi función onSubmit en la pantalla de cambio de contraseña donde eventualmente quiero usar Auth.completeNewPassword para actualizar la contraseña del usuario en Cognito
const onSubmitClick = (e) => { e.preventDefault(); if (validateFields()); Auth.currentSession() .then((user) => console.log(user)) .catch((err) => console.log(err)); };Aquí está la documentación proporcionada por AWS https://docs.amplify.aws/lib/auth/manageusers/q/platform/js/#forgot-password y el código proporcionado por AWS para actualizar la contraseña
Auth.signIn(username, password) .then(user => { if (user.challengeName === 'NEW_PASSWORD_REQUIRED') { const { requiredAttributes } = user.challengeParam; // the array of required attributes, eg ['email', 'phone_number'] Auth.completeNewPassword( user, // the Cognito User Object newPassword, // the new password // OPTIONAL, the required attributes { email: 'xxxx@example.com', phone_number: '1234567890' } ).then(user => { // at this time the user is logged in if no MFA required console.log(user); }).catch(e => { console.log(e); }); } else { // other situations } }).catch(e => { console.log(e); });Nueva respuesta actualizada para reflejar su publicación actualizada, cambie onSubmitClick a lo siguiente:
const onSubmitClick = (e) => { e.preventDefault(); if (validateFields()); Auth.currentAuthenticatedUser() .then(user => { console.log(user)) }) .then((data) => console.log(data)) .catch((err) => console.log(err)); }; Está viendo la documentación que muestra cómo usar el usuario después de Auth.signIn() (que fue mi respuesta anterior), en comparación con lo que usa: Auth.currentAuthenticatedUser() . El ejemplo de documentación adecuado que debe consultar es este:https://www.docs.amplify.aws/lib/auth/manageusers/q/platform/js