Почему HttpContext.SignInAsync выдаёт ошибку?

Рейтинг: -1Ответов: 1Опубликовано: 13.03.2023

Program

    builder.Services.AddDbContext<IdentityContext>(options =>
{
    options.UseSqlServer(builder.Configuration.GetConnectionString("Defult"));
});
builder.Services.AddAuthentication("Cookie").AddCookie("Cookie", options =>
{
    options.LoginPath = "/Identity/Register";
});
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("RegisteredUser", policy =>
    {
        policy.RequireRole(ClaimTypes.Role, "RegisteredUser");
    });

Context

public class IdentityContext : DbContext
    {
        public IdentityContext(DbContextOptions options)
            : base(options)
        {
        }

        public DbSet<RegisteredUser> RegisteredUsers { get; set; }
    }

Controller

[HttpPost]
    public async Task<IActionResult> Register(RegisterViewModle modle)
    {
        if (ModelState.IsValid)
        {
            if(await _Database.RegisteredUsers.FirstOrDefaultAsync(x => x.Login == modle.Login) is null)
            {
                var user = new RegisteredUser
                {
                    Email = modle.Email,
                    Password = Convert.ToHexString(_PasswordHash.ComputeHash(Encoding.UTF8.GetBytes(modle.Password))),
                    Login = modle.Login
                };

                await _Database.AddAsync(user);
                await _Database.SaveChangesAsync();

                var claims = new List<Claim>
                {
                    new(ClaimsIdentity.DefaultNameClaimType, user.Email),
                    new(ClaimTypes.Role, "RegisteredUser")
                };

                var claimsId = new ClaimsIdentity(claims, "Cookie", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
                await HttpContext.SignInAsync("Cookie", new ClaimsPrincipal(claimsId));

                return Redirect(modle.ReturnUrl);
            }
            ModelState.AddModelError(string.Empty, "Такой пользователь уже существует");
        }

        return View(modle);
    }

Сама ошибка

введите сюда описание изображения

Ответы

▲ 0
  1. Пакет NuGet для работы с аутентификацией и авторизацией стоит?
  2. Установлен пакет Microsoft.AspNetCore.Authentication?
  3. Если всё стоит, то настроен-ли сервис аутентификации в ConfigureServices в Startup.cs, и middleware в методе Configure?
  4. Добавили сервис аутентификации в IServiceCollection, используя метод AddAuthentication, и настроили middleware используя метод UseAuthentication и UseAuthorization?
  5. Зависимости для работы с аутентификацией и авторизацией, включая Microsoft.AspNetCore.Authentication.Cookies, Microsoft.AspNetCore.Identity и другие.

Пишу много по авторизации потому что код заклинил на await SignInAsync. Могу быть не прав.

  1. По ошибкам с XML - по умолчанию HttpContent пытается прочитать контент как XML, а не как JSON или другой тип контента. Возможно необходимо установить правильный заголовок Content-Type в запросе и/или ответе, чтобы указать, какой тип контента отправляется и принимается.