public async Task <ServiceResponseData> ConfirmEmailAndSetPasswordAsync(ConfirmEmailData model)
        {
            var responseData = new ServiceResponseData();

            try
            {
                if (!string.Equals(model.Password, model.ConfirmPassword))
                {
                    throw new Exception("Confirm password does't match");
                }
                var userEntity = _aspNetUserRepository.Get().SingleOrDefault(c => c.Id == model.UserId && c.SecurityToken == model.Token);
                if (userEntity == null)
                {
                    throw new Exception("Confirmation failed, invalid verification token!");
                }

                var user = await _userManager.FindByIdAsync(model.UserId.ToString());


                if (user.EmailConfirmed && await _userManager.HasPasswordAsync(user))
                {
                    throw new Exception("Your account has been confirmed already!");
                }

                var confirmationToken = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                var confirmResult = await _userManager.ConfirmEmailAsync(user, confirmationToken);

                if (!confirmResult.Succeeded)
                {
                    throw new Exception(confirmResult.Errors.FirstOrDefault().Description);
                }


                var addPasswordResult = await _userManager.AddPasswordAsync(user, model.Password);

                if (!addPasswordResult.Succeeded)
                {
                    throw new Exception(addPasswordResult.Errors.FirstOrDefault().Description);
                }
                user.IsActive = true;
                await _userManager.UpdateAsync(user);
            }
            catch (Exception ex)
            {
                responseData.ErrorMessage = ex.ProcessException(_errorService);
                responseData.IsSuccess    = false;
            }

            return(await Task.FromResult(responseData));
        }
Exemplo n.º 2
0
        public async Task <ApiResult> ConfirmEmailAsync(ConfirmEmailData confirmEmailData)
        {
            var result = default(ApiResult);
            var userId = confirmEmailData.Id;
            var user   = await users.GetByIdAsync(userId);

            if (user == null)
            {
                result = ApiResult.GetErrorResult(ApiResultStatus.NotFound, $"User with id = {userId} was not found", message: "User not found");
            }
            else
            {
                result = await GetConfirmEmailResultAsync(user, confirmEmailData.Token);
            }

            return(result);
        }
Exemplo n.º 3
0
        public async Task <IActionResult> ConfirmEmail([FromBody] ConfirmEmailData confirmEmailData)
        {
            var result = await accountService.ConfirmEmailAsync(confirmEmailData);

            return(this.GetActionResult(result, logger));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> ConfirmEmailAndSetPassword([FromBody] ConfirmEmailData model)
        {
            var responseData = await userAccountService.ConfirmEmailAndSetPasswordAsync(model);

            return(Ok(responseData));
        }