public static async Task <GoblinIdentityEmailConfirmationModel> RegisterAsync(GoblinIdentityRegisterModel model, CancellationToken cancellationToken = default) { ValidationHelper.Validate <GoblinIdentityRegisterModelValidator, GoblinIdentityRegisterModel>(model); try { var endpoint = GetRequest(model.LoggedInUserId).AppendPathSegment(GoblinIdentityEndpoints.RegisterUser); var emailConfirmModel = await endpoint .ConfigureRequest(x => { x.JsonSerializer = JsonSerializer; }) .PostJsonAsync(model, cancellationToken: cancellationToken) .ReceiveJson <GoblinIdentityEmailConfirmationModel>() .ConfigureAwait(true); return(emailConfirmModel); } catch (FlurlHttpException ex) { await FlurlHttpExceptionHelper.HandleErrorAsync(ex).ConfigureAwait(true); return(null); } }
public async Task <IActionResult> Register([FromBody] GoblinIdentityRegisterModel model, CancellationToken cancellationToken = default) { var registerResponseModel = await _userService.RegisterAsync(model, cancellationToken); return(Created(Url.Action("GetProfile", new { registerResponseModel.Id }), registerResponseModel)); }
public async Task <GoblinIdentityEmailConfirmationModel> RegisterAsync(GoblinIdentityRegisterModel model, CancellationToken cancellationToken = default) { model.Email = model.Email?.Trim().ToLowerInvariant(); model.UserName = model.UserName?.Trim().ToLowerInvariant(); CheckUniqueEmail(model.Email); CheckUniqueUserName(model.UserName); using var transaction = await GoblinUnitOfWork.BeginTransactionAsync(cancellationToken).ConfigureAwait(true); var userEntity = model.MapTo <UserEntity>(); userEntity.PasswordLastUpdatedTime = userEntity.RevokeTokenGeneratedBeforeTime = GoblinDateTimeHelper.SystemTimeNow; userEntity.PasswordHash = PasswordHelper.HashPassword(model.Password, userEntity.PasswordLastUpdatedTime); userEntity.EmailConfirmToken = StringHelper.Generate(6, false, false); userEntity.EmailConfirmTokenExpireTime = GoblinDateTimeHelper.SystemTimeNow.Add(SystemSetting.Current.EmailConfirmTokenLifetime); _userRepo.Add(userEntity); await GoblinUnitOfWork.SaveChangesAsync(cancellationToken).ConfigureAwait(true); // User Roles if (model.Roles?.Any() == true) { model.Roles = model.Roles.Select(x => x.Trim()).ToList(); var roleEntities = await _roleRepo.Get(x => model.Roles.Contains(x.Name)).ToListAsync(cancellationToken) .ConfigureAwait(true); foreach (var roleEntity in roleEntities) { _userRoleRepo.Add(new UserRoleEntity { UserId = userEntity.Id, RoleId = roleEntity.Id }); } await GoblinUnitOfWork.SaveChangesAsync(cancellationToken).ConfigureAwait(true); } transaction.Commit(); // Email Confirmation Code var emailConfirmationModel = new GoblinIdentityEmailConfirmationModel { Id = userEntity.Id, EmailConfirmToken = userEntity.EmailConfirmToken, EmailConfirmTokenExpireTime = userEntity.EmailConfirmTokenExpireTime }; return(emailConfirmationModel); }