public async Task <IActionResult> Register(ApiRegister register,
                                                   [FromServices] RoleManager <IdentityRole> roleManager,
                                                   [FromServices] UserManager <IdentityUser> userManager)
        {
            var user = new IdentityUser(register.Username);

            IdentityResult createUserResult = await userManager.CreateAsync(user,
                                                                            register.Password);

            if (!createUserResult.Succeeded) // e.g. did not meet password policy
            {
                return(BadRequest(createUserResult));
            }

            if (register.IsAdmin)
            {
                // make sure admin role exists
                if (!await roleManager.RoleExistsAsync("admin"))
                {
                    var            role             = new IdentityRole("admin");
                    IdentityResult createRoleResult = await roleManager.CreateAsync(role);

                    if (!createRoleResult.Succeeded)
                    {
                        return(StatusCode(StatusCodes.Status500InternalServerError,
                                          "failed to create admin role"));
                    }
                }

                // add user to admin role
                IdentityResult addRoleResult = await userManager.AddToRoleAsync(user, "admin");

                if (!addRoleResult.Succeeded)
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError,
                                      "failed to add user to admin role"));
                }
            }

            await SignInManager.SignInAsync(user, false);

            return(NoContent()); // nothing to show the user that he can access
        }
Ejemplo n.º 2
0
        public async Task <ActionResult> Register(ApiRegister register)
        {
            if (!ModelState.IsValid)
            {
                return(View(register));
            }

            HttpRequestMessage request = CreateRequestToService(HttpMethod.Post,
                                                                Configuration["ServiceEndpoints:AccountRegister"], register);

            HttpResponseMessage response;

            try
            {
                response = await HttpClient.SendAsync(request);
            }
            catch (HttpRequestException)
            {
                ModelState.AddModelError("", "Unexpected server error");
                return(View(register));
            }

            if (!response.IsSuccessStatusCode)
            {
                ModelState.AddModelError("", "Unexpected server error");
                return(View(register));
            }

            var success = PassCookiesToClient(response);

            if (!success)
            {
                ModelState.AddModelError("", "Unexpected server error");
                return(View(register));
            }

            // login success
            return(RedirectToAction("Index", "Home"));
        }