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

如何配置ASP.NET Core Identity以移除用户名字段,仅用邮箱认证

用邮箱替代用户名作为.NET Core Identity主标识的解决方案

核心思路

.NET Core Identity底层依赖UserName字段作为用户唯一标识,官方确实没有直接禁用该字段的配置,但可以通过自定义用户实体+自动同步邮箱与用户名的方式,实现以邮箱作为主标识的效果,无需修改框架核心逻辑。


1. 自定义用户实体,绑定邮箱与用户名

创建继承自IdentityUser的自定义用户类,让UserName和NormalizedUserName自动同步Email和NormalizedEmail的值,确保底层验证逻辑完全兼容:

public class ApplicationUser : IdentityUser
{
    // 让UserName始终等于Email
    public override string UserName
    {
        get => Email;
        set => base.UserName = value;
    }

    // 同步规范化后的用户名与邮箱
    public override string NormalizedUserName
    {
        get => NormalizedEmail;
        set => base.NormalizedUserName = value;
    }
}

2. 配置Identity启用邮箱验证与唯一约束

在Program.cs/Startup.cs中配置Identity,强制邮箱唯一并启用邮箱确认:

builder.Services.AddDefaultIdentity<ApplicationUser>(options => 
{
    options.SignIn.RequireConfirmedAccount = true;
    // 强制邮箱唯一
    options.User.RequireUniqueEmail = true;
    // 登录需验证已确认的邮箱
    options.SignIn.RequireConfirmedEmail = true;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();

3. 调整登录逻辑(使用默认Identity UI时)

如果使用官方Identity UI,先通过脚手架生成登录页面,再做以下调整:

  • 在Login.cshtml中移除用户名输入框,只保留邮箱和密码输入项
  • 在Login.cshtml.cs的OnPostAsync方法中,直接用邮箱作为登录凭证:
var result = await _signInManager.PasswordSignInAsync(
    Input.Email, 
    Input.Password, 
    Input.RememberMe, 
    lockoutOnFailure: false
);

4. 数据库层面自动同步(可选)

为避免意外修改导致用户名与邮箱不一致,可在DbContext的SaveChanges方法中强制同步:

public override int SaveChanges()
{
    foreach (var userEntry in ChangeTracker.Entries<ApplicationUser>())
    {
        if (userEntry.State is EntityState.Added or EntityState.Modified)
        {
            userEntry.Entity.UserName = userEntry.Entity.Email;
            userEntry.Entity.NormalizedUserName = userEntry.Entity.NormalizedEmail;
        }
    }
    return base.SaveChanges();
}

这种方式既满足了以邮箱作为主标识的需求,又完全兼容Identity的底层机制,不会出现系统运行异常。

内容的提问来源于stack exchange,提问作者Isaac Morales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:02:15