public async Task SignUpAsync(UserModel user) { if (string.IsNullOrEmpty(user.Password)) { user.Errors.Add(ExceptionsInfo.InvalidPassword); } if (string.IsNullOrEmpty(user.FirstName)) { user.Errors.Add(ExceptionsInfo.InvalidFirstName); } if (string.IsNullOrEmpty(user.LastName)) { user.Errors.Add(ExceptionsInfo.InvalidLastName); } if (user.Errors.Any()) { throw new UserException(HttpStatusCode.BadRequest, user.Errors); } user.PhoneNumber = ""; user.Id = 0; // NOTE: Id is setting to 0 cause of user ability to select custom id var applicationUser = _userMapper.Map(user); var result = await _userManager.CreateAsync(applicationUser, user.Password); var userNameError = result.Errors.FirstOrDefault(item => item.Code == "DuplicateUserName"); if (userNameError != null) { userNameError.Description = $"Nickname '{user.NickName}' is already taken"; } if (!result.Succeeded) { throw new UserException(HttpStatusCode.BadRequest, result.Errors.Select(error => error.Description).ToList()); } var emailConfirmationToken = await _userManager.GenerateEmailConfirmationTokenAsync(applicationUser); await _emailProvider.SendEmailConfirmationMessageAsync(applicationUser.Id, emailConfirmationToken, user.Email); result = await _userManager.AddToRoleAsync(applicationUser, UserRole.Client.ToString()); if (!result.Succeeded) { throw new UserException(HttpStatusCode.BadRequest, result.Errors.Select(error => error.Description).ToList()); } }
public async Task SignUpAsync(UserModel model) { var user = _mapper.Map <User>(model); if (await EmailExistsAsync(model.Email)) { throw new ServerException(HttpStatusCode.BadRequest, ExceptionMessage.EMAIL_ALREADY_EXISTS); } if (await UsernameExistsAsync(model.Username)) { throw new ServerException(HttpStatusCode.BadRequest, ExceptionMessage.USERNAME_ALREADY_EXISTS); } var result = await _userManager.CreateAsync(user, model.Password); if (!result.Succeeded) { throw new ServerException(HttpStatusCode.BadRequest, ExceptionMessage.CREATE_USER_FAILED); } await _userManager.AddToRoleAsync(user, RoleType.Client.ToString()); string token = await _userManager.GenerateEmailConfirmationTokenAsync(user); string encoded = HttpUtility.UrlEncode(token); var uriBuilder = new UriBuilder(_emailConfirmation.Url); var query = HttpUtility.ParseQueryString(uriBuilder.Query); query[EMAIL_NAME] = model.Email; query[TOKEN_NAME] = encoded; uriBuilder.Query = query.ToString(); string uriString = uriBuilder.ToString(); await _emailProvider.SendEmailConfirmationMessageAsync(model.Email, uriString); }