public async Task <IHttpActionResult> Register(RegisterModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var user = new ServiceUser() { UserName = model.Email, Email = model.Email }; IdentityResult result = await UserManager.CreateAsync(user, model.Password); if (!result.Succeeded) { if (result.Errors != null && result.Errors.Where(error => error.Contains("is already taken")).Any()) { return(BadRequest($"Email {model.Email} is already taken")); } return(GetErrorResult(result)); } return(Created(new Uri($"{Request.RequestUri.GetLeftPart(UriPartial.Authority)}/token"), new { Email = model.Email })); }
/// <summary> /// Register user /// </summary> /// <param name="data">Login data</param> /// <param name="hasManager">Has user manager</param> /// <returns> /// <see cref="IdentityResult"/>s object containing the result of registration. /// </returns> private IdentityResult RegisterUser(RegisterViewModel data, bool hasManager) { IdentityResult result = IdentityResult .Failed(); var userDto = data .ToDto(); userDto.UserRole = hasManager ? "Manager" : "Employee"; var findUserTask = ServiceUserManager .FindByNameAsync(userDto.Login); findUserTask .Wait(); var alreadyRegistered = (findUserTask.Result != null); if (alreadyRegistered) { throw new Exception(String.Format( "User {0} already exists!", userDto.Login)); } var user = new ServiceUser(userDto); var createUserTask = ServiceUserManager .CreateAsync(user); createUserTask .Wait(); result = createUserTask .Result; if (result == IdentityResult.Success) { findUserTask = ServiceUserManager .FindByNameAsync(userDto.Login); findUserTask .Wait(); user = findUserTask .Result; LoginUser(user); } return(result); }