コード例 #1
0
        public async Task <Response> UpdatePasswordByToken([FromBody] TokenPasswordModel model)
        {
            _logger.LogInformation($"Обновление пароля по токену для пользователя с email: \"{model.Email}\"");

            var user = await _signInManager.UserManager.FindByEmailAsync(model.Email);

            if (user == null)
            {
                _logger.LogWarning("Не нашли пользователя по email. Подозрительно.");
                throw new InvalidRequestDataException("Недействительный токен"); // не будем раскрывать карты
            }

            var result = await _signInManager.UserManager.ResetPasswordAsync(user, model.Token, model.Password);

            if (!result.Succeeded)
            {
                throw new InvalidRequestDataException(result.Errors);
            }

            // пользователь получил токен по почте, значит почта подтверждена
            if (!user.EmailConfirmed)
            {
                user.EmailConfirmed = true;
                await _signInManager.UserManager.UpdateAsync(user);
            }

            _logger.LogInformation($"Пользователь (Id = {user.Id}, Email = {user.Email}) успешно обновил пароль по токену");
            return(new Response());
        }
コード例 #2
0
        public async Task <IActionResult> TokenPasswordChange([FromBody] TokenPasswordModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.Select(e => e.Value).ToList()));
            }

            var appUser = await userManager.FindByEmailAsync(model.Email);

            var result = await userManager.ResetPasswordAsync(appUser, model.Token, model.NewPassword);

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

            await userManager.ResetAccessFailedCountAsync(appUser);

            await userManager.SetLockoutEndDateAsync(appUser, null);

            return(Ok());
        }