Я использую в качестве pnet core-hosted blazor wasm тип проекта. Я пытаюсь подтвердить учетную запись пользователя с помощью ссылки на электронную почту, которая отправляется пользователю.
Письмо создается и отправляется. Ссылка для подтверждения генерируемый: https://localhost: 5001 / accountconfirmation код = CfDJ8L2gJclnoq5BioPxBNdLc8wCyaMHcitemYm7I8XKkey + M + vauvFOj0HN1meMs6JusAIMNd8gFCe / e8U0w3MMa0blmDzAMqrXGHvekYo5iPGeFlzLrY2guPO1iwAhUlQJ4t6ZRk5ieyGcgREID / 9G8rwJKYC + Ct4WXtQiyfywGpixo63Y4B4hNdQquQE5trdzF0bOyeq2lJhbAlhe5TnsnGqiKbJq60oCuR07M / Gcp9URBLPYVCbG7Ymi + 4BUUCRA / Q == & = идентификатор пользователя 5742c1f1-7957-4154-b12d-5e6e3eaebd0f
При нажатии на ссылку электронной почты пользователь переходит в веб-приложение внешнего интерфейса Blazor, которое затем отправляет параметры строки запроса в действие AccountsController. Значения получены правильно в действии контроллера.
Я ожидал бы, что этот метод действия установит подтвержденную учетную запись, но этого не происходит. Я также пробовал URL-кодирование кода, но все равно безуспешно. UserId - это GUID и передается в виде строки.
[HttpGet] [Route(Urls.ConfirmAccount)] public async Task<IdentityResult> Confirm([FromQuery]string code,[FromQuery]string userId) { var user = await _userManager.FindByIdAsync(userId); IdentityResult result = await _userManager.ConfirmEmailAsync(user, code); return result; }
Попробуйте добавить Base64UrlDecode
[HttpGet] [Route(Urls.ConfirmAccount)] public async Task<IdentityResult> Confirm([FromQuery]string code,[FromQuery]string userId) { code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code)); var user = await _userManager.FindByIdAsync(userId); IdentityResult result = await _userManager.ConfirmEmailAsync(user, code); return result; }
Это рабочий пример: https://github.com/ADefWebserver/Blazor-Blogs/blob/master/BlazorBlogs/Areas/Identity/Pages/Account/ConfirmEmail.cshtml.cs