How safe is Cookie based Authentication/Authorization in ASP.NET C#? Take a look at the example below, don't worry about password hashing, All this code does is that it takes a username and a password and lets a user login. After they login, I have multiple pages that use the role for authorization purposes. is this a secure/semi-secure method, or sufficient enough to prevent attacks and exploits against a web application? would you change anything in this code?
public async Task<IActionResult> OnPostAsync()
    {
        var user = await _context.UsersTableTest.FirstOrDefaultAsync(u => u.UserName == Username);
        if (user != null && user.PasswordHash == Password)
        {
            var claims = new List<Claim>
        {
            new Claim(ClaimTypes.Name, user.UserName),
            new Claim("UserDepartment", user.UserDepartment) // Assuming you have a Department property in the user model
        };
            var claimsIdentity = new ClaimsIdentity(
                claims, CookieAuthenticationDefaults.AuthenticationScheme);
            var authProperties = new AuthenticationProperties
            {
                // Set additional properties if needed
            };
            await HttpContext.SignInAsync(
                CookieAuthenticationDefaults.AuthenticationScheme,
                new ClaimsPrincipal(claimsIdentity),
                authProperties);
            return RedirectToPage("/Index"); // Redirect to a protected page
        }
        else
        {
            ModelState.AddModelError("", "Invalid login attempt.");
            return Page();
        }
    }


UsersTableTest.FirstOrDefaultAsync(u => u.UserName == Username)You expect more than one person to have the same username?FirstOrDefaultshould be used in extremely rare cases IMHO. \$\endgroup\$