【发布时间】:2014-05-26 12:53:45
【问题描述】:
我正在阅读有关 Microsoft 中的用户身份的信息,并尝试将它们应用到我的 MVC5 应用程序中。
据我所知,Id 是关键,而 userName 不是关键,并且定义说它可以为空, 所以我在问自己...为什么在 MVC5 项目模板中,当您输入一个已经存在的用户名时,您会收到一条错误消息??
我尝试访问用户名验证,但无法访问。
这是数据库定义:
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 身份概念的体验,并将改进我的代码。
非常感谢任何指导
【问题讨论】:
-
我认为试图击败 Identity 接受重复的用户名是一种非常糟糕和危险的方法。在几乎所有的身份验证系统中,用户名都必须是唯一的。一个用户名只能用于验证一个用户。仅仅因为它可以在设计不佳的表格中是唯一的,并不意味着它在概念和实践上就不必是唯一的。
标签: c# asp.net validation asp.net-identity