private async Task CreateAccountType(EntityEntry <Customer> customer, RegisterCreateDto user)
        {
            //if (user.AccountType == AccountTypes.Musician)
            //{
            //	await this.CreateTurnItUpUser(customer.Entity, "Musician").ConfigureAwait(false);
            //}

            //if (user.AccountType == AccountTypes.Recruiter)
            //{
            //	await this.CreateTurnItUpUser(customer.Entity, "Recruiter").ConfigureAwait(false);
            //}
        }
        public async Task <IActionResult> Register([FromBody] RegisterCreateDto model)
        {
            var user = new ApplicationUser
            {
                UserName       = model.Email,
                Email          = model.Email,
                PhoneNumber    = model.PhoneNumber,
                EmailConfirmed = false
            };

            var result = await _userManager.CreateAsync(user, model.Password);

            if (!result.Succeeded)
            {
                var existingUser = await _userManager.FindByEmailAsync(model.Email);

                if (existingUser == null)
                {
                    return(GetErrorResult(result));
                }

                var signInResult = await _signInManager.CheckPasswordSignInAsync(existingUser, model.Password, false);

                if (!signInResult.Succeeded)
                {
                    return(GetErrorResult(result));
                }

                if (!existingUser.EmailConfirmed)
                {
                    await _mediator.Send(new EmailConfirmationCommand { User = user });
                }
                if (!existingUser.PhoneNumberConfirmed)
                {
                    //await _mediator.Send(new SmsConfirmationCommand {User = user});
                    await _mediator.Send(new SmsVerifyLinkCommand { User = user });
                }
                return(Ok(_mapper.Map <RegisterDto>(existingUser)));
            }

            await _mediator.Send(new EmailConfirmationCommand { User = user });

            //await _mediator.Send(new SmsConfirmationCommand { User = user });
            await _mediator.Send(new SmsVerifyLinkCommand { User = user });

            _logger.LogInformation("UserProfile created a new account with password");

            return(Ok(_mapper.Map <RegisterDto>(user)));
        }
Beispiel #3
0
        public async Task <IActionResult> Post([FromBody] RegisterCreateDto registerDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var result = await this.userService.CreateUserAsync(registerDto, registerDto.Password);

            if (result.Errors.Any())
            {
                return(this.BadRequest(result.Errors));
            }

            return(new CreatedResult(result.UserCreatedId, result.AccessToken));
        }
        public async Task <RegisterResponseDto> CreateUserAsync(RegisterCreateDto user, string password)
        {
            var userIdentity = this.mapper.Map <AppUser>(user);

            var result = await this.userManager.CreateAsync(userIdentity, password).ConfigureAwait(false);

            if (result.Errors.Any())
            {
                return(this.FillRegisterErrors(result.Errors.ToList()));
            }

            await this.userManager.AddClaimAsync(userIdentity,
                                                 new Claim(Constants.Strings.JwtClaimIdentifiers.Rol, Constants.Strings.JwtClaims.ApiAccess));

            await this.userManager.AddClaimAsync(userIdentity,
                                                 new Claim(Constants.Strings.JwtClaimIdentifiers.Events, Constants.Strings.JwtClaims.EventsAccess));

            if (!result.Succeeded)
            {
                return(null);
            }

            var customer = await this.identityDbContext.Customers.AddAsync(new Customer { IdentityId = userIdentity.Id, /*Location = user.Location*/ });

            await this.CreateAccountType(customer, user);

            await this.identityDbContext.SaveChangesAsync();

            var claimsIdentity = await this.GetClaimsIdentity(user.Email, password).ConfigureAwait(false);

            var loginResponse = await this.GenerateToken(
                claimsIdentity,
                user.Email,
                password,
                new JsonSerializerSettings { Formatting = Formatting.Indented })
                                .ConfigureAwait(false);

            return(new RegisterResponseDto
            {
                IdentityResult = result,
                UserCreatedId = userIdentity.Id,
                AccessToken = loginResponse.AccessToken,
                Errors = new List <Error>(),
            });
        }