You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:20:17