Закодированные символы в параметрах запроса Crash Angular Client - PullRequest
0 голосов
/ 01 марта 2019

Когда пользователь запрашивает сброс пароля, URL-адрес сброса будет отправлен по электронной почте:

https://example.com/reset-password?id=206dd3f4-8248-4e7a-bd90-16585a0cc165&code=CfDJ8KegIZmThRtPj1kp523h7xyoNB5wCUt%2BvSf7e53lGbvQoE7xagL4mnLODLy0v6WCC91fiPoN9TRreDVT8SJvDABKX5X3KG8LT1XZqqrlilWC5kbiTmWYKUfWju7DrsZ1DUuEvvJLAqNpbqI%2Fgkiu0vb3PGkinIbygMMBJufllU4TY5qcOjzQIQo06eNo1KR6L1lwT9Vap0TE5rr%2FuYIyt2lRIJQGk9pBUg2qQuiolDl4

Этот URL-адрес состоит из идентификатора пользователя и сгенерированного токена Identity Core;

    [HttpPost("forgot")]
    [AllowAnonymous]
    public async Task<IActionResult> ForgotPassword([FromBody]ForgotPasswordViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = await _userManager.FindByEmailAsync(model.Email);
            if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))
            {
                // Don't reveal that the user does not exist or is not confirmed
                return Ok();
            }

            var token = await _userManager.GeneratePasswordResetTokenAsync(user);
            var queryParams = new Dictionary<string, string>()
            {
                {"id", user.Id },
                {"token", token }
            };

            var callbackUrl = ResetPasswordCallbackLink(queryParams); // <--- Creates the url

            await _emailSender.SendResetPasswordAsync(model.Email, callbackUrl);

            _logger.LogInformation($"User: {model.Email} forgot password");

            return Ok();
        }

        return Ok();
    }

Этот токен вызывает сбой на стороне клиента (Angular 6+) из-за закодированных символов в токене% 2B (+) и% 2F (/).

Без этих закодированныхсимволов, страница отображается идеально, а параметры можно прочитать с помощью:

  this.id = this.route.snapshot.paramMap.get('id');
  this.token = this.route.snapshot.paramMap.get('token');

ОБНОВЛЕНИЕ

Переход на случайную существующую страницу, например / login? id = 123%2B также сгенерирует 'InternalError: слишком много рекурсии' RxJs.http://prntscr.com/mrspvf Так это, вероятно, архитектурная проблема?

...