Blazor -> Страница входа -> не может выполнить _httpContextAccessor.HttpContext.SignInAsync () - PullRequest
0 голосов
/ 30 сентября 2019

Я не могу создать функционалы для входа в систему пользователя (проверка подлинности с помощью cookie) на Blazor (на стороне сервера). Для простого примера создайте некоторый код:

@using Microsoft.AspNetCore.Http;
@using Microsoft.AspNetCore.Authentication;
@using Microsoft.AspNetCore.Authentication.Cookies;
@using System.Security.Claims;
@inject IHttpContextAccessor _httpContextAccessor
@inject NavigationManager UriHelper


<form class="form-group">
    <input class="form-control" @bind="Name" type="text" />
    <input class="form-control" @bind="Password" type="password" />
    <button type="button" @onclick="@(()=>SbmForm())" class="btn btn-light">Sbm</button>   
</form>


@code{
    [Parameter]
    public string Name { get; set; }
    public string Password { get; set; }  

    public async Task SbmForm()
    {
        if (!String.IsNullOrEmpty(Name))
        {
            var claims = new[] { new Claim(ClaimTypes.Name, Name),
                new Claim(ClaimTypes.Role, "Admin") };

            var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);

            try
            {
                await _httpContextAccessor.HttpContext.SignInAsync(
                  CookieAuthenticationDefaults.AuthenticationScheme,
                  new ClaimsPrincipal(identity),
                  new AuthenticationProperties
                  {
                      IsPersistent = true
                  });
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
            UriHelper.NavigateTo("/counter");
        }
    }
}

Я получаю исключение "Заголовки ответа не могут быть изменены, поскольку ответ имеетуже началось."в коде "await _httpContextAccessor.HttpContext.SignInAsync ..." Что мне нужно сделать?

1 Ответ

0 голосов
/ 30 сентября 2019

РЕДАКТИРОВАТЬ: Как предложил Хенк Холтерманн в комментариях, лучшим способом было бы просмотреть официальные шаблоны Blazor с аутентификацией (Создать новый проект => Приложение Blazor => Создать => Изменить аутентификацию). Если вам по какой-то причине необходимо работать с HttpContext, поработайте с примером в приведенной мною ссылке:

HttpContext не следует использовать в серверном приложении Blazor, так как в приложениях SignalR обычно нет HttpContext.

Возможный обходной путь - создание бритвенных страниц входа / выхода. Бритвенные страницы могут получить доступ к HttpContext, войти в систему и затем перенаправить на вашу реальную домашнюю страницу. Вы можете найти подробное описание здесь .

...