Правильная реализация забытого пароля AspNetBoilerPlate

Я использую aspnetboilerplate (MVC) и хотел реализовать функцию забытого пароля, чтобы пользователь мог сбрасывать свои собственные пароли, используя ссылку на экране входа в систему.

Я предполагаю, что это сработает, создав код сброса пароля, который затем отправляется пользователю по электронной почте. Пользователь переходит по ссылке и попадает на экран, позволяющий сбросить пароль.

Я застрял на начальном этапе. Я начал с копии действия входа в систему, заметив, что при попытке входа в систему был возвращен объект пользователя. Отсюда я пытаюсь установить код сброса пароля.

  [HttpPost]
        [UnitOfWork]
        public virtual async Task<JsonResult> ForgotPassword(ForgotPasswordViewModel forgotPasswordModel, string returnUrl = "", string returnUrlHash = "")
        {
            returnUrl = NormalizeReturnUrl(returnUrl);
            if (!string.IsNullOrWhiteSpace(returnUrlHash))
            {
                returnUrl = returnUrl + returnUrlHash;
            }

            var loginResult = await _logInManager.LoginAsync(forgotPasswordModel.UsernameOrEmailAddress, "ForgotPassword", GetTenancyNameOrNull());

            loginResult.User.SetNewPasswordResetCode();

            switch (loginResult.Result)
            {
                case AbpLoginResultType.Success:
                    return Json(loginResult);
                default:
                    throw _abpLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(loginResult.Result, forgotPasswordModel.UsernameOrEmailAddress, GetTenancyNameOrNull());
            }
        }

Проверка таблицы AbpUser после

loginResult.User.SetNewPasswordResetCode ();

Я не вижу кода сброса пароля для пользователя, все они равны нулю.

Может ли кто-нибудь указать мне в правильном направлении.

заранее спасибо

Спасибо за правильный ответ ниже, просто для завершения ниже это именно то, что сработало. Очевидно, игнорируйте возврат json в конце

общедоступная виртуальная асинхронная задача ForgotPassword (ForgotPasswordViewModelhibitedPasswordModel, строка returnUrl = "", строка returnUrlHash = "") {// var user = await GetUserByChecking (emailAddress);

    var user = await _userManager.FindByEmailAsync(forgotPasswordModel.UsernameOrEmailAddress);

    if (user == null)
    {
        throw new UserFriendlyException("User not found!");
    }

    user.SetNewPasswordResetCode();

    //Send an email to user with the below password reset code
    /* Uri.EscapeDataString(user.PasswordResetCode) */

    return Json("");
}

person PowerMan2015    schedule 29.07.2019    source источник