在ASP.NET Core 3.1中,可以使用Authentication和Authorization来实现认证和授权功能。要实现认证Cookie但仅存储用户名的功能,可以按照以下步骤进行操作:
Startup.cs
文件的ConfigureServices
方法中,配置认证服务:public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.Cookie.Name = "YourCookieName";
options.Cookie.SameSite = SameSiteMode.Strict;
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(30); // 设置Cookie过期时间
options.LoginPath = "/Account/Login"; // 设置登录页面的路径
});
services.AddControllersWithViews();
}
[Authorize]
特性,用于验证用户是否已登录:[Authorize]
public class HomeController : Controller
{
// 控制器的代码...
}
SignInAsync
方法来创建认证Cookie并存储用户名:[HttpPost]
public async Task Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
// 验证用户名和密码,如果验证通过,使用下列代码登录用户
var claims = new List
{
new Claim(ClaimTypes.Name, model.UserName) // 存储用户名到认证Cookie
};
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var principal = new ClaimsPrincipal(identity);
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);
return RedirectToAction("Index", "Home");
}
return View(model);
}
User.Identity.Name
来获取当前已认证的用户名:public IActionResult Index()
{
var userName = User.Identity.Name; // 获取当前已认证的用户名
// 其他代码...
return View();
}
注意:上述代码只是示例,实际使用时需要根据具体需求进行适当的修改。