.NET Core Identity如何获取所有当前登录的活跃用户?
关于用户活跃状态检查及表格实现方案
核心问题解答
Microsoft.AspNetCore.Identity.EntityFrameworkCore的默认IdentityUser类没有内置的用户活跃状态属性,但可以通过以下两种方式实现用户活跃状态的检查与展示:
方案一:利用现有属性快速实现
如果你的"活跃状态"可通过现有字段判定(比如邮箱已验证、账号未锁定),可直接复用这些属性:
EmailConfirmed:邮箱已验证可视为活跃LockoutEnd:若LockoutEnd小于当前时间,说明账号未锁定(活跃)
修改控制器代码
[Authorize] public class UserController : Controller { private readonly UserManager<IdentityUser> _userManager; public UserController(UserManager<IdentityUser> userManager) { _userManager = userManager; } public IActionResult Index() { var users = _userManager.Users.Select(u => new { u.UserName, u.Email, IsActive = u.EmailConfirmed && (u.LockoutEnd == null || u.LockoutEnd < DateTimeOffset.Now) }).ToList(); return View(users); } }
修改视图代码
@foreach(var user in Model){ <tr> <td> @user.UserName </td> <td> @user.Email </td> <td> @(user.IsActive ? "活跃" : "非活跃") </td> </tr> }
方案二:自定义用户类扩展活跃状态字段(推荐)
如果需要更灵活的活跃状态控制,建议自定义用户类继承IdentityUser,添加专属的IsActive字段:
1. 创建自定义用户类
public class ApplicationUser : IdentityUser { public bool IsActive { get; set; } = true; // 默认设置为活跃状态 }
2. 更新DbContext
public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } }
3. 更新服务注册(Program.cs/Startup.cs)
// 替换原有的AddDefaultIdentity配置 builder.Services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>();
4. 修改控制器代码
[Authorize] public class UserController : Controller { private readonly UserManager<ApplicationUser> _userManager; public UserController(UserManager<ApplicationUser> userManager) { _userManager = userManager; } public IActionResult Index() { var users = _userManager.Users.ToList(); return View(users); } }
5. 修改视图代码
@foreach(var user in Model){ <tr> <td> @user.UserName </td> <td> @user.Email </td> <td> @(user.IsActive ? "活跃" : "非活跃") </td> </tr> }
内容的提问来源于stack exchange,提问作者Shofiul
相关产品推荐
相关产品推荐

