Tengo un problema que no he podido resolver. Estoy usando grupos de usuarios de AWS Cognito con una función lambda de migración de usuarios para importar usuarios sobre la marcha. Después de validar con éxito la contraseña de un usuario, me gustaría verificar si esta contraseña cumple con los requisitos que impone Cognito. Según los documentos , esto debe hacerse en el código:
Amazon Cognito no aplica la política de seguridad de la contraseña que configuró para el grupo de usuarios durante la migración mediante el desencadenador de Lambda. Si la contraseña no cumple con la política de contraseñas que configuró, Amazon Cognito aún acepta la contraseña para que pueda continuar con la migración del usuario. Para hacer cumplir la política de seguridad de la contraseña y rechazar las contraseñas que no cumplan con la política, valide la seguridad de la contraseña en su código. Luego, si la contraseña no cumple con la política, establezca finalUserStatus en RESET_REQUIRED.
Sin embargo, cuando configuro finalUserStatus en RESET_REQUIRED, veo un comportamiento que no entiendo. Al iniciar sesión por primera vez, veo lo siguiente, que parece correcto:
En este momento, también recibo un correo electrónico con Asunto: "Su contraseña temporal" y cuerpo: "Su nombre de usuario es ...@gmail.com y la contraseña temporal es l6*NWOEp". Pensé que esto era extraño porque aún no había enviado el formulario anterior. Cuando introduzco mi correo electrónico en el formulario anterior, recibo:
No recibo ningún correo electrónico adicional. Cuando completo este formulario, recibo el mismo error.
Cuando vuelvo a la página de inicio de sesión y uso la contraseña temporal que recibí en el correo electrónico, se me redirige al primer formulario anterior: el que dice "Se requiere restablecer la contraseña del usuario por razones de seguridad".
A continuación se muestra el código, eliminé la configuración no relacionada y el manejo de errores:
export const lambdaHandler = async (event: any, context: any): Promise<any> => { if (event.triggerSource == "UserMigration_Authentication") { const userName = event.userName; const password = event.request.password; const user = await authenticateUser(userName, password); event.response.userAttributes = { "email": user.email, "username": user.email, "email_verified": "true", }; if (passwordIsWeak(password) { // always true for testing purposes event.response.finalUserStatus = "RESET_REQUIRED"; } context.succeed(event); } };El usuario de mi grupo de usuarios de Cognito tiene un estado de confirmación de "Reinicio requerido".
Probé muchas combinaciones de finalUserStatus (RESET_REQUIRED, CONFIRMED, FORCE_CHANGE_PASSWORD) y messageAction (SUPPRESS, RESEND) devueltos en event.response. De todos modos, ¡gracias por cualquier ayuda brindada!