public async Task <IActionResult> CreateUser([FromBody] CreateUserRequest request) { var user = new User { Id = $"{Guid.NewGuid()}", UserName = request.UserName, Email = request.Email, CreateDate = DateTime.UtcNow, PhoneNumber = request.PhoneNumber, PasswordExpirationPolicy = request.PasswordExpirationPolicy }; IdentityResult result = null; if (string.IsNullOrEmpty(request.Password)) { result = await _userManager.CreateAsync(user); } else { result = await _userManager.CreateAsync(user, request.Password, validatePassword : !request.BypassPasswordValidation.GetValueOrDefault()); } if (!result.Succeeded) { return(BadRequest(result.Errors.ToValidationProblemDetails())); } if (request.ChangePasswordAfterFirstSignIn.HasValue && request.ChangePasswordAfterFirstSignIn.Value == true) { await _userManager.SetPasswordExpiredAsync(user, true); } var claims = request?.Claims?.Count() > 0 ? request.Claims.Select(x => new Claim(x.Type, x.Value)).ToList() : new List <Claim>(); if (!string.IsNullOrEmpty(request.FirstName)) { claims.Add(new Claim(JwtClaimTypes.GivenName, request.FirstName)); } if (!string.IsNullOrEmpty(request.LastName)) { claims.Add(new Claim(JwtClaimTypes.FamilyName, request.LastName)); } if (claims.Any()) { await _userManager.AddClaimsAsync(user, claims); } var response = SingleUserInfo.FromUser(user); await _eventService.Publish(new UserCreatedEvent(response)); return(CreatedAtAction(nameof(GetUser), Name, new { userId = user.Id }, response)); }
public async Task <IActionResult> CreateUser([FromBody] CreateUserRequest request) { var user = new User { Id = $"{Guid.NewGuid()}", UserName = request.UserName, Email = request.Email, CreateDate = DateTime.UtcNow, PhoneNumber = request.PhoneNumber, PasswordExpirationPolicy = request.PasswordExpirationPolicy }; IdentityResult result = null; if (string.IsNullOrEmpty(request.Password)) { result = await _userManager.CreateAsync(user); } else { result = await _userManager.CreateAsync(user, request.Password); } if (!result.Succeeded) { return(BadRequest(result.Errors.ToValidationProblemDetails())); } if (request.ChangePasswordAfterFirstSignIn.HasValue && request.ChangePasswordAfterFirstSignIn.Value == true) { await _userManager.SetPasswordExpiredAsync(user, true); } var claims = new List <Claim>(); if (!string.IsNullOrEmpty(request.FirstName)) { claims.Add(new Claim(JwtClaimTypes.GivenName, request.FirstName)); } if (!string.IsNullOrEmpty(request.LastName)) { claims.Add(new Claim(JwtClaimTypes.FamilyName, request.LastName)); } if (claims.Any()) { await _userManager.AddClaimsAsync(user, claims); } var response = new SingleUserInfo { Id = user.Id, UserName = user.UserName, Email = user.Email, PhoneNumber = user.PhoneNumber, PasswordExpirationPolicy = user.PasswordExpirationPolicy, IsAdmin = user.Admin, TwoFactorEnabled = user.TwoFactorEnabled, EmailConfirmed = user.EmailConfirmed, PhoneNumberConfirmed = user.PhoneNumberConfirmed, Claims = user.Claims?.Select(x => new ClaimInfo { Id = x.Id, Type = x.ClaimType, Value = x.ClaimValue }) .ToList() }; await _eventService.Raise(new UserCreatedEvent(response)); return(CreatedAtAction(nameof(GetUser), Name, new { userId = user.Id }, response)); }