Как правильно реализовать Сброс пароля в ASP.NET Core и Angular - PullRequest
0 голосов
/ 24 июня 2019

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

Моя проблема: я не знаю, как это должно работать точно, я могу успешно отправить электронное письмо, но отправленная ему ссылка должна быть ссылкой на страницу восстановления с его токеном на URL, который я предполагаю?

Мне нужно знать, как я использую URL с моего сайта Angular ...

В моем коде я отправляю ссылку пользователю со ссылкой, но я думаю, что это нужно сделать после того, как пользователь перейдет на страницу с измененным паролем.

Вот мой код:

// Post Request
// POST : /api/AppUser/Login
#region Recover Password
[HttpPost]
[Route("RecoverPassword")]
public async Task<IActionResult> RecoverPassword(RecoverPasswordModel model)
{
        var user = await _userService.FindByEmail(model.Email);
        string code = await _userService.GetRecoveryToken(user);

        string recoveryLink = Url.Action("RecoveryLink", "AppUser", new
        {
            UserId = user.Id,
            Code = code
        }, protocol: HttpContext.Request.Scheme);

        bool finalRes = _userService.SendEmail(user, confirmationTokenLink);

        if (finalRes)
            return Ok();
        else
            return BadRequest(new { message = "No such user with this email" });
}

[HttpGet("[action]")]
[AllowAnonymous]
public async Task<IActionResult> RecoveryLink(string userId, string code, string newPassword)
{
            if (string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(code))
                return BadRequest(new { message = "Code or ID in empty" });

            var user = await _userService.FindByID(userId);

            if (user == null)
                return BadRequest(new { message = "User not found!" });

            var result = await _userService.ChangePassword(user, code, newPassword);

            if (result.Succeeded)
                return Content($"<html><body><h1>Your Password changed successfully!!! </h1><hr><a href= { EMAIL_VERIFIED_URI }> Please Login now! </a></body></html>", "text/html");
            else
                return BadRequest(new { message = "Reset failed!" });

}

1 Ответ

0 голосов
/ 24 июня 2019

Я дам вам знать, что вторая функция RecoveryLink имеет большую ошибку, потому что она AllowAnonymous и Id не зашифрованы, так что любой может поставить любой Id и изменить пароль для любого ... так что если вы хотитеЧтобы использовать эту философию (отправка почты), вы должны зашифровать и расшифровать UserId и объединить его confirmationTokenLink.

, так что теперь вы хотите сделать это с помощью angular: вы должны сделать страницу Html по вашему запросукак:

вы должны сделать маршрут RecoveryLink/AppUser/..... идущим на угловую страницу, сделав URL-адрес угловым маршрутом и сделав все функции как HTTP-реквизиты

...