以下是一个使用ASP.NET Core身份验证实现登录和锁定功能的代码示例:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
services.Configure(options =>
{
// 配置密码设置
options.Password.RequireDigit = true;
options.Password.RequiredLength = 8;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = true;
options.Password.RequireLowercase = false;
// 配置用户锁定设置
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.AllowedForNewUsers = true;
});
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = "/Account/Login";
options.LogoutPath = "/Account/Logout";
options.AccessDeniedPath = "/Account/AccessDenied";
});
// 添加授权策略
services.AddAuthorization(options =>
{
options.AddPolicy("RequireAdminRole", policy => policy.RequireRole("Admin"));
options.AddPolicy("RequireUserRole", policy => policy.RequireRole("User"));
});
services.AddControllersWithViews();
}
public class AccountController : Controller
{
private readonly SignInManager _signInManager;
private readonly UserManager _userManager;
public AccountController(
SignInManager signInManager,
UserManager userManager)
{
_signInManager = signInManager;
_userManager = userManager;
}
[HttpGet]
public IActionResult Login()
{
return View();
}
[HttpPost]
public async Task Login(LoginViewModel model, string returnUrl = null)
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
if (result.IsLockedOut)
{
// 用户被锁定,显示错误消息
ModelState.AddModelError(string.Empty, "账户被锁定,请稍后再试!");
return View(model);
}
ModelState.AddModelError(string.Empty, "无效的登录尝试!");
return View(model);
}
return View(model);
}
[HttpPost]
public async Task Logout()
{
await _signInManager.SignOutAsync();
return RedirectToAction("Index", "Home");
}
}
public class AccountController : Controller
{
// ...
[HttpPost]
[ValidateAntiForgeryToken]
public async Task LockUser(string userId)
{
var user = await _userManager.FindByIdAsync(userId);
if (user != null)
{
await _userManager.SetLockoutEndDateAsync(user, DateTimeOffset.UtcNow.AddYears(100));
// 或使用以下代码立即锁定用户
// await _userManager.SetLockoutEnabledAsync(user, true);
// await _userManager.SetLockoutEndDateAsync(user, DateTimeOffset.MaxValue);
}
return RedirectToAction("Index", "Home");
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task UnlockUser(string userId)
{
var user = await _userManager.FindByIdAsync(userId);
if (user != null)
{
await _userManager.SetLockoutEndDateAsync(user, null);
// 或使用以下代码立即解锁用户
// await _userManager.SetLockoutEnabledAsync(user, false);
}
return RedirectToAction("Index", "Home");
}
}
以上代码示例演示了如何配置ASP.NET Core身份验证服务,并在AccountController中实现登录和锁定功能。您可以根据自己的需求进行修改和扩展。