在ASP.NET Core中实现无数据库的登录功能可以使用Cookie认证,以下是一个简单的示例:
首先,创建一个新的ASP.NET Core项目。
在Startup.cs文件中,添加以下代码来配置Cookie认证:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.Cookie.Name = "YourCookieName";
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
options.LoginPath = "/Account/Login"; // 登录页面的URL
options.AccessDeniedPath = "/Account/AccessDenied"; // 拒绝访问页面的URL
});
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseAuthentication();
app.UseAuthorization();
// ...
}
public class AccountController : Controller
{
[HttpGet]
public IActionResult Login(string returnUrl = "")
{
ViewData["ReturnUrl"] = returnUrl;
return View();
}
[HttpPost]
public async Task Login(string username, string password, string returnUrl = "")
{
if (IsValidUser(username, password))
{
var claims = new List
{
new Claim(ClaimTypes.Name, username)
};
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var principal = new ClaimsPrincipal(identity);
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);
if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
ModelState.AddModelError(string.Empty, "Invalid username or password");
return View();
}
[HttpPost]
public async Task Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return RedirectToAction("Index", "Home");
}
private bool IsValidUser(string username, string password)
{
// 在这里可以添加自定义的用户验证逻辑,例如检查用户名和密码是否匹配
return username == "admin" && password == "password";
}
}
@model YourNamespace.AccountController.LoginViewModel
这样,用户就可以通过填写用户名和密码来登录系统了。登录成功后,系统会创建一个带有用户信息的Cookie,并将其发送给客户端浏览器,在后续的请求中,客户端浏览器会自动携带该Cookie进行认证。