我正在阅读有关Microsoft用户身份的内容,并尝试在我的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 ICollection<IdentityUserClaim> Claims { get; }
public virtual string Id { get; set; }
public virtual ICollection<IdentityUserLogin> Logins { get; }
public virtual string PasswordHash { get; set; }
public virtual ICollection<IdentityUserRole> Roles { get; }
public virtual string SecurityStamp { get; set; }
public virtual string UserName { get; set; }
}
}
当用户注册时,会调用UserManager.CreateAsync
方法,下面是定义:
public async Task<ActionResult> Register(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 Task<IdentityResult> CreateAsync(TUser user, string password);
我在代码中没有看到任何验证,但它不允许您输入已存在的用户名。
我认为理解这个是如何工作的将会改善我的asp.net身份概念体验,并且会提高我的代码水平。
非常感谢任何指导。