繁体   English   中英

从 Asp Net MVC 中的 IdentityUser 中排除 email

[英]Exclude email from IdentityUser in Asp Net MVC

我有一个带有身份验证的 asp.net MVC 项目。 默认实现使用 email 地址来注册用户或让他们登录,但在我的项目中我不需要他们的 email 地址并且我想使用简单的字符串用户名,因此我在我的 OnModelCreating 方法中包含以下代码以排除 email地址和一些我不需要的其他功能:

modelBuilder.Entity<ApplicationUser>().Ignore(p => p.AccessFailedCount).
            Ignore(p => p.Email).Ignore(p => p.EmailConfirmed).Ignore(p => p.LockoutEnabled).
            Ignore(p => p.LockoutEndDateUtc).Ignore(p => p.PhoneNumber).
            Ignore(p => p.PhoneNumberConfirmed).Ignore(p => p.TwoFactorEnabled);

我已经更改了 LoginViewModel 和 Login.cshtml,并将 email 地址字段替换为用户名,但是当我尝试登录时,在以下行的登录操作中引发异常:

var result = await SignInManager.PasswordSignInAsync(model.Username, model.Password, 
            model.RememberMe, shouldLockout: false);

错误页面说:

属性“Email”不是“ApplicationUser”类型的声明属性。 使用 Ignore 方法或 NotMappedAttribute 数据批注验证该属性是否未从 model 中明确排除。 确保它是一个有效的原始属性。

问题是我怎样才能完全排除email?

您不需要在OnModelCreating方法中进行更改。 您需要做的就是在 ViewModel 和 Login & Register 方法中进行一些更改。

  1. Email属性名称替换为用户名并注释掉[EmailAddress]注释。
  2. 登录视图中将Email属性替换为用户名。
  3. 登录方法中,将model.Email替换为model.Username 您会注意到身份使用 PasswordSignInAsync 方法,该方法将用户名作为参数。

同样,您必须为RegisterViewModelRegister方法和视图添加用户名字段,以允许用户在注册时输入用户名。

您不需要显式忽略 OnModelCreating 方法中的 Email 字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM