public IActionResult OnPost(string codigo)
        {
            string email = HttpContext.Session.GetString("email");

            if (email == null)
            {
                return(RedirectToPage("/Welcome/ForgetPassword"));
            }
            if (codigo == null)
            {
                Mensaje = "Debe proporcionar un código de recuperación de cuenta";
                return(Page());
            }
            DateTime fechaActual = DateTime.Now;

            Recuperacioncuenta rec = _context.Recuperacioncuenta
                                     .Include(r => r.IdUsuarioNavigation)
                                     .Where(
                //el codigo de recuperacion aun es valido
                r => r.Estado == 1
                //y no ha caducado por exceso de tiempo de espera (1 hora)
                && r.FechaEnvio.AddMinutes(60) > fechaActual
                //la fecha de caducidad
                && r.FechaRecuperacion == null &&
                r.IdUsuarioNavigation.Correo == email
                ).Last();

            if (rec == null)
            {
                Mensaje = "Esta cuenta no tiene asignado códigos de recuperación";
                return(Page());
            }
            if (rec.Codigo == codigo)
            {
                rec.Estado            = 0;
                rec.FechaRecuperacion = DateTime.Now;
                _context.SaveChanges();
                HttpContext.Session.SetInt32("IdUsuarioTemporal", rec.IdUsuario);
                return(RedirectToPage("/Welcome/ChangePassword"));
            }
            else
            {
                Mensaje = "El código ingresado no coincide con el código enviado a su correo";
                return(Page());
            }
        }
        public async Task <IActionResult> OnPostAsync()
        {
            if (email == null)
            {
                Mensaje = "Debe ingresar un email para poder enviar su código de recuperación";
                return(Page());
            }
            Usuario Usuario = _context.Usuarios
                              .Include(u => u.Empleado)
                              .ThenInclude(e => e.IdPersonaNavigation)
                              .Where(u => u.Correo == email)
                              .FirstOrDefault();

            if (Usuario == null)
            {
                Mensaje = "El correo proporcionado no está vinculado a ninguna cuenta";
                return(Page());
            }
            HttpContext.Session.SetString("email", Usuario.Correo);
            string sql            = "UPDATE recuperacioncuenta r set r.Estado = @Estado Where IdUsuario = @IdUsuario ";
            var    EstadoParam    = new MySqlParameter("@Estado", "1");
            var    IdUsuarioParam = new MySqlParameter("@IdUsuario", Usuario.Id);

            _context.Database.ExecuteSqlCommand(sql, EstadoParam, IdUsuarioParam);

            string             recoveryCode = Encrypted.CreatePassword(8);
            Recuperacioncuenta rec          = new Recuperacioncuenta
            {
                IdUsuario = Usuario.Id,
                //all codes generated will be 8 characteres
                Codigo     = recoveryCode,
                FechaEnvio = DateTime.Now,
                //mark as enabled for use
                Estado            = 1,
                FechaRecuperacion = null
            };

            _context.Recuperacioncuenta.Add(rec);
            SendCodeForEmail(email, recoveryCode, Usuario);
            await _context.SaveChangesAsync();

            return(RedirectToPage("/Welcome/LoginWithCode"));
        }