我正在阅读微软的用户身份,并试图在我的MVC5应用程序中应用它们.
据我所知,Id是关键,而userName不是键,定义说它可以为null,所以我问自己......为什么在MVC5项目模板中,当你输入一个已经存在的userName时你会收到错误信息??
我试图达到userName验证,但我不能.
这是数据库定义:
CREATE TABLE [dbo].[AspNetUsers] ( [Id] NVARCHAR (128) NOT NULL, [UserName] NVARCHAR (MAX) NULL,
这里是IdentityUser定义,通知(无验证):
namespace Microsoft.AspNet.Identity.EntityFramework { public class IdentityUser : IUser { public IdentityUser(); public IdentityUser(string userName); public virtual ICollectionClaims { get; } public virtual string Id { get; set; } public virtual ICollection Logins { get; } public virtual string PasswordHash { get; set; } public virtual ICollection Roles { get; } public virtual string SecurityStamp { get; set; } public virtual string UserName { get; set; } } }
在注册时,UserManager.CreateAsync
调用该方法,这里是定义:
public async TaskRegister(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser() { UserName = model.UserName }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { await SignInAsync(user, isPersistent: false); return RedirectToAction("Index", "Home"); } else { AddErrors(result); } } // If we got this far, something failed, redisplay form return View(model); }
这是我达到的最后一件事CreateAsync
:
public virtual TaskCreateAsync(TUser user, string password);
我在代码中的任何地方都没有看到验证,但它不允许您输入现有的userName.
我认为理解这是如何工作将改善我使用asp.net的Identity概念的经验,并将改进我的代码.
任何指导都非常感谢
这发生在IdentityDbContext
protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary
如果您不想要此行为,则可以直接从DbContext继承.