Почему 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);
}
Источник: Stack Overflow на русском