예제 #1
0
        public async Task <ActionResult> RecuperarClave(RecuperarClaveModel model)
        {
            if (ModelState.IsValid)
            {
                // Obtener el usuario y verificar que existe y pertenece a la aplicación actual.
                Usuario user = await UserManager.FindByNameAsync(model.Email);

                if (user == null || user.Aplicaciones.All(a => a.AplicacionID != Aplicacion.AplicacionID))
                {
                    // Si no existe o no pertenece a la aplicación actual, notificar.
                    return(Json(new { resul = false, mensaje = Txt.Account.EmailNoEncontrado }));
                }

                // Si el usuario existe y pertenece a la aplicación actual, obtener un token para resetear
                // la clave y enviarlo a la dirección de email.
                string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);

                string callbackUrl = Url.Action(actionName: "ResetPassword", controllerName: "Account",
                                                routeValues: new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                string           logoPath    = HttpContext.Server.MapPath("~/Content/Images/PushNews-150.png");
                RestablecerClave modeloEmail = new RestablecerClave(callbackUrl, user.Nombre, logoPath);
                string           cuerpo      = RenderToString("~/Areas/Backend/Views/PlantillasEmail/RestablecerClave.cshtml", modeloEmail);

                await EmailService.EnviarEmailRecuperarClave(user.Email, cuerpo, modeloEmail);

                return(Json(new { resul = true, mensaje = Txt.Account.ClaveReseteada }));
            }
            else
            {
                return(Json(new { resul = false, mensaje = Util.SerializarErroresModelo(ModelState) }));
            }
        }
예제 #2
0
        public async Task EnviarEmailRecuperarClave(string destinatario, string cuerpo, RestablecerClave modelo)
        {
            AlternateView  html = AlternateView.CreateAlternateViewFromString(cuerpo, Encoding.UTF8, "text/html");
            LinkedResource logo = new LinkedResource(modelo.RutaLogo);

            logo.ContentId = "logo";
            html.LinkedResources.Add(logo);
            MailMessage msg = PrepararMensaje(destinatario, Txt.Account.RestablecerClaveEmailAsunto, true);

            msg.AlternateViews.Add(html);
            await SendAsync(msg);
        }