Почему HttpContext.SignInAsync выдаёт ошибку?
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);
}
Ответы (1 шт):
Автор решения: Evgeniy Leonidov
→ Ссылка
- Пакет NuGet для работы с аутентификацией и авторизацией стоит?
- Установлен пакет Microsoft.AspNetCore.Authentication?
- Если всё стоит, то настроен-ли сервис аутентификации в ConfigureServices в Startup.cs, и middleware в методе Configure?
- Добавили сервис аутентификации в IServiceCollection, используя метод AddAuthentication, и настроили middleware используя метод UseAuthentication и UseAuthorization?
- Зависимости для работы с аутентификацией и авторизацией, включая Microsoft.AspNetCore.Authentication.Cookies, Microsoft.AspNetCore.Identity и другие.
Пишу много по авторизации потому что код заклинил на await SignInAsync. Могу быть не прав.
- По ошибкам с XML - по умолчанию HttpContent пытается прочитать контент как XML, а не как JSON или другой тип контента. Возможно необходимо установить правильный заголовок Content-Type в запросе и/или ответе, чтобы указать, какой тип контента отправляется и принимается.

