Esempio n. 1
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/Error/Error");
            try
            {
                var user = await _userManager.GetUserAsync(User);

                if (user == null)
                {
                    return(NotFound($"No se puede dar con el usuario con el ID '{_userManager.GetUserId(User)}'."));
                }

                if (!ModelState.IsValid)
                {
                    await LoadAsync(user);

                    return(Page());
                }
                try
                {
                    var datos = ObtenerDatosCliente.Usuario(await _userManager.GetUserIdAsync(user)).Result;
                } catch (Exception e)
                {
                    return(NotFound($"No se puede dar con el usuario con el ID '{_userManager.GetUserId(User)}'."));
                }
                if (!await datosIgualAsync(user))
                {
                    var datos     = ObtenerDatosCliente.Usuario(await _userManager.GetUserIdAsync(user)).Result;
                    var respuesta = await EnviarDatosCliente.ActualizarUsuario(
                        new Usuario()
                    {
                        Idusuario  = Input.IdUsuario,
                        IDidentity = await _userManager.GetUserIdAsync(user),
                        Nombre     = Input.Nombre,
                        Apellido   = Input.Apellido
                    });

                    if (respuesta.IsSuccessStatusCode)
                    {
                        StatusMessage = "Tus datos personales han cambiado.";
                        return(RedirectToPage());
                    }
                }


                StatusMessage = "Tus datos personales no han cambiado.";
                return(RedirectToPage());
            }
            catch (Exception e)
            {
                return(LocalRedirect(returnUrl));
            }
        }
        /// <summary>
        /// Metodo que crea un nuevo usuario con los datos del inputModel
        /// </summary>
        /// <param name="returnUrl"></param>
        /// <returns></returns>
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (!await _roleManger.RoleExistsAsync(UsuarioSeleccionado) || UsuarioSeleccionado.Equals("Super Admin"))
            {
                StatusMessage = "Hubo un error. El usuario no se ha creado";
                return(RedirectToPage());
            }
            if (ModelState.IsValid)
            {
                var user = new IdentityUser {
                    UserName = Input.Email, Email = Input.Email
                };
                var result = await _userManager.CreateAsync(user, Input.Password);


                if (result.Succeeded)
                {
                    var _user = await _userManager.FindByEmailAsync(Input.Email);

                    var userData = new Usuario {
                        IDidentity = _user.Id, Nombre = Input.Nombre, Apellido = Input.Apellido
                    };
                    var resultD = await EnviarDatosCliente.CrearUsuario(userData);

                    if (resultD.IsSuccessStatusCode)
                    {
                        await _userManager.AddToRoleAsync(_user, UsuarioSeleccionado);

                        _logger.LogInformation("Se ha creado un nueva cuenta con contraseña.");

                        var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                        code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                        var callbackUrl = Url.Page(
                            "/Account/ConfirmEmail",
                            pageHandler: null,
                            values: new { area = "Identity", userId = user.Id, code = code },
                            protocol: Request.Scheme);

                        await _emailSender.SendEmailAsync(Input.Email, "Confirma tu email",
                                                          $"Por favor confirma tu cuenta <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>presionando aquí.</a>.");

                        if (_userManager.Options.SignIn.RequireConfirmedAccount)
                        {
                            return(RedirectToPage("RegisterConfirmation", new { email = Input.Email }));
                        }
                        else
                        {
                            StatusMessage = "El usuario se ha creado con exito";
                            return(RedirectToPage());
                            //await _signInManager.SignInAsync(user, isPersistent: false);
                            //return LocalRedirect(returnUrl);
                        }
                    }
                    else
                    {
                        await _userManager.DeleteAsync(user);
                    }

                    foreach (var error in result.Errors)
                    {
                        ModelState.AddModelError(string.Empty, error.Description);
                    }
                }
                else
                {
                    // Se muestran los errores si es que hay. Por ejemplo intentar registrar un correo que ya esta en la bd
                    foreach (var error in result.Errors)
                    {
                        ModelState.AddModelError(string.Empty, error.Description);
                    }
                    await LoadAsync();

                    return(Page());
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
Esempio n. 3
0
        /// <summary>
        /// Crea los roles en la base de datos de identity si es que no existen, y crea al usuario
        /// Super Admin, si este no fue creado anteriormente, con los datos que obtiene de appsettings.json
        /// en SAdm, lo asigna como usuario tanto en la BD de identity como en la BD de cocoteca,
        /// si algo llega a fallar en el registro, se elimina de ambas, de no ser así se le asigna el rol
        /// de Super Admin.
        /// </summary>
        /// <param name="serviceProvider">Define un mecanismo para obtener un proveedor de sopote a otros objetos</param>
        /// <returns>Una operación asíncrona</returns>
        private async Task CreateRoles(IServiceProvider serviceProvider)
        {
            //initializing custom roles
            var RoleManager = serviceProvider.GetRequiredService <RoleManager <IdentityRole> >();
            var UserManager = serviceProvider.GetRequiredService <UserManager <IdentityUser> >();

            string[]       roleNames = { "Super Admin", "Admin", "Almacenista", "Cliente" };
            IdentityResult roleResult;

            foreach (var roleName in roleNames)
            {
                var roleExist = await RoleManager.RoleExistsAsync(roleName);

                if (!roleExist)
                {
                    //create the roles and seed them to the database: Question 1
                    roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
                }
            }

            //Here you could create a super user who will maintain the web app
            var poweruser = new IdentityUser
            {
                UserName = Configuration["SAdm:UserName"],
                Email    = Configuration["SAdm:UserEmail"],
            };
            //Ensure you have these values in your appsettings.json file
            string userPWD = Configuration["SAdm:UserPassword"];
            var    _user   = await UserManager.FindByEmailAsync(Configuration["SAdm:AdminUserEmail"]);

            if (_user == null)
            {
                var createPowerUser = await UserManager.CreateAsync(poweruser, userPWD);

                if (createPowerUser.Succeeded)
                {
                    poweruser = await UserManager.FindByEmailAsync(Configuration["SAdm:AdminUserEmail"]);

                    var resul = await EnviarDatosCliente.CrearUsuario(
                        new Usuario()
                    {
                        IDidentity = poweruser.Id,
                        Nombre     = Configuration["SAdm:Nombre"],
                        Apellido   = Configuration["SAdm:Apellido"]
                    });

                    if (resul.IsSuccessStatusCode)
                    {
                        //here we tie the new user to the role
                        await UserManager.SetLockoutEnabledAsync(poweruser, false);

                        await UserManager.AddToRoleAsync(poweruser, "Super Admin");

                        var code = await UserManager.GenerateEmailConfirmationTokenAsync(poweruser);

                        code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                        code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
                        await UserManager.ConfirmEmailAsync(poweruser, code);
                    }
                    else
                    {
                        await UserManager.DeleteAsync(poweruser);
                    }
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Verifica que la información sea correcta, si es así realiza el registro del usuario.
        /// </summary>
        /// <param name="returnUrl">URL de reedirección</param>
        /// <returns>Si la información es correcta lo redirige a la página correspondiente, de lo
        /// contrario le indica los errores en el formulario.</returns>
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl      = returnUrl ?? Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                var user = new IdentityUser {
                    UserName = Input.Email, Email = Input.Email
                };
                var result = await _userManager.CreateAsync(user, Input.Password);


                if (result.Succeeded)
                {
                    var _user = await _userManager.FindByEmailAsync(Input.Email);

                    var userData = new Usuario {
                        IDidentity = _user.Id, Nombre = Input.Nombre, Apellido = Input.Apellido
                    };
                    var resultD = await EnviarDatosCliente.CrearUsuario(userData);

                    await _userManager.AddToRoleAsync(_user, "Cliente");

                    if (resultD.IsSuccessStatusCode)
                    {
                        _logger.LogInformation("User created a new account with password.");

                        var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                        code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                        var callbackUrl = Url.Page(
                            "/Account/ConfirmEmail",
                            pageHandler: null,
                            values: new { area = "Identity", userId = user.Id, code = code },
                            protocol: Request.Scheme);

                        await _emailSender.SendEmailAsync(Input.Email, "Confirma tu email",
                                                          $"Por favor confirma tu cuenta <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>presionando aquí.</a>.");

                        if (_userManager.Options.SignIn.RequireConfirmedAccount)
                        {
                            return(RedirectToPage("RegisterConfirmation", new { email = Input.Email }));
                        }
                        else
                        {
                            await _signInManager.SignInAsync(user, isPersistent : false);

                            return(LocalRedirect(returnUrl));
                        }
                    }
                    else
                    {
                        await _userManager.DeleteAsync(user);
                    }
                    foreach (var error in result.Errors)
                    {
                        ModelState.AddModelError(string.Empty, error.Description);
                    }
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
Esempio n. 5
0
        /// <summary>
        /// Verifica que los datos introducidos sean correctos y estén completos, si es así actualiza la base de datos,
        /// crea la dirección si el usuario no tiene una.
        /// </summary>
        /// <returns>El formulario con una confirmación de los cambios o la señalización de los errores.</returns>
        public async Task <IActionResult> OnPostAsync()
        {
            string returnUrl = Url.Content("~/Error/Error");

            try
            {
                var user = await _userManager.GetUserAsync(User);

                if (user == null)
                {
                    return(NotFound($"No se puede dar con el usuario con el ID '{_userManager.GetUserId(User)}'."));
                }

                if (!ModelState.IsValid)
                {
                    await LoadAsync(user);

                    return(Page());
                }


                if (!ObtenerDatosCliente.DireccionExiste(user.Id).Result)
                {
                    var respuesta = await EnviarDatosCliente.CrearDireccion(new Direccion()
                    {
                        calle        = Input.Calle,
                        codigoPostal = Input.CodigoPostal,
                        idusuario    = ObtenerDatosCliente.Usuario(user.Id).Result.Idusuario,
                        idmunicipio  = IdMunicipioSeleccionado,
                        noExterior   = Input.NoExt,
                        noInterior   = Input.NoInt
                    });

                    if (respuesta.IsSuccessStatusCode)
                    {
                        StatusMessage = "Tu direccion ha cambiado.";
                        return(RedirectToPage());
                    }
                }
                else
                {
                    if (!await dirIgualAsync(user))
                    {
                        var datos     = ObtenerDatosCliente.Direccion(await _userManager.GetUserIdAsync(user)).Result;
                        var respuesta = await EnviarDatosCliente.ActualizarDireccion(
                            new Direccion()
                        {
                            calle        = Input.Calle,
                            codigoPostal = Input.CodigoPostal,
                            idusuario    = ObtenerDatosCliente.Usuario(user.Id).Result.Idusuario,
                            idmunicipio  = IdMunicipioSeleccionado,
                            noExterior   = Input.NoExt,
                            noInterior   = Input.NoInt,
                            iddireccion  = Input.IdDir
                        });

                        if (respuesta.IsSuccessStatusCode)
                        {
                            StatusMessage = "Tu direccion ha cambiado.";
                            return(RedirectToPage());
                        }
                    }
                }


                StatusMessage = "Tu direccion no ha cambiado.";
                return(RedirectToPage());
            }
            catch (Exception e)
            {
                return(LocalRedirect(returnUrl));
            }
        }