Как исправить Аутентификацию в компоненте Blazor - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь реализовать компонент Login в Blazor:

namespace ApprovalMatrix.Pages
{
    public class MatrixLoginBase : ComponentBase
    {
        public MatrixLoginModel Model { get; set; }
        public EditContext LoginEditContext { get; set; }
        private ValidationMessageStore _messageStore;
        [Inject]
        public IHttpContextAccessor HttpClient { get; set; }

        protected override void OnInitialized()
        {
            Model = new MatrixLoginModel();
            LoginEditContext = new EditContext(Model);
            _messageStore = new ValidationMessageStore(LoginEditContext);
            base.OnInitialized();
        }

        public async Task LoginAsync()
        {
            _messageStore.Clear();
            bool isValid = LoginEditContext.Validate();
            if (isValid)
            {
                if (Model.UserName != "sa" || Model.Password != "sa1")
                {
                    _messageStore.Add(LoginEditContext.Field("Password"), "Invalid user name or password");
                    LoginEditContext.NotifyValidationStateChanged();
                }
                else
                {
                    var claims = new List<Claim>
                    {
                        new Claim(ClaimTypes.Name, "Sys Admin"),
                        new Claim(ClaimTypes.Role, "Admin"),
                    };
                    var claimsIdentity = new ClaimsIdentity(
                        claims, CookieAuthenticationDefaults.AuthenticationScheme);
                    var authProperties = new AuthenticationProperties
                    {
                        IsPersistent = true,
                        RedirectUri = ""
                    };
                    await HttpClient.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
                        new ClaimsPrincipal(claimsIdentity),
                        authProperties);                    
                }
            }
        }
    }

    public class MatrixLoginModel
    {
        [Required(ErrorMessage = "Please enter User Name")]
        public string UserName { get; set; }
        [Required(ErrorMessage = "Please enter Password")]
        public string Password { get; set; }
    }
}

К сожалению, вызов await HttpClient.HttpContext.SignInAsync вызывает следующее исключение

Заголовки ответа не могут быть изменены, поскольку ответ уже начал

Я не могу понять, что я делаю неправильно.

...