UserManager.AddPasswordAsync() 返回"Name cannot be null or empty"



我使用MVC5和 ASP.NET 身份框架。

我扩展了VS2013脚手架的帐户管理功能。

如果我的用户已向外部登录提供程序注册,并且想要添加本地密码,则在调用"AddPasswordAsync()"时出现错误:"名称不能为空或空"

我已经查看了我的数据库并确认用户名不为空。

此错误是什么意思?

我的应用程序用户如下所示:

public class Person : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Sex Sex { get; set; }
    [Display(Name = "Birth date")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime Birthdate { get; set; }
    public string EMail { get; set; }
    public int PostalCode { get; set; }
    public Collection<Race> Races { get; set; }
    public Collection<Participation> Participations { get; set; }
    public Person()
    {
        if (string.IsNullOrEmpty(UserName))
        {
            UserName = EMail;
        }
        Participations = new Collection<Participation>();
        Races = new Collection<Race>();
        Birthdate = DateTime.Now;
    }
}

此致敬意Frederik

经过多次尝试,我终于解决了它。错误消息是错误的,它来自数据库,意味着用户名字段为空,但数据库需要它。

确保向数据库发送用户名,例如:

 var user = new ApplicationUser { UserName = model.Email, Email = model.Email, Hometown = model.Hometown };

并通过运行更新数据库确保数据库在此之前是最新的。

好吧,我希望你的ApplicationUser能引出更多关于问题是什么的线索,但我没有看到任何突出的东西。所以,这是我能给出的建议。这不是在问UserName;它明确表示"名称是必需的"。 AddPasswordAsync只是将用户对象保存到数据库中,因此您需要更深入地查看并确保整个对象是干净的,即没有验证错误。某些地方的验证失败,所以我的第一步是运行一个项目,甚至是解决方案范围内的搜索"名称"。不幸的是,对于像这样一般的事情,您可能会收到大量的误报,但是当您最终找到具有该名称的一个或多个属性时,这很可能是您的罪魁祸首。

嗨,

我尝试复制您的问题,我认为错误不在您的应用程序用户中。我认为问题在于您尝试创建用户时。因为在您的 Person 构造函数中,您分配的用户名等于 EMail(我认为您不需要该行)。但身份在创建实例之前验证用户名。我做了和你一样的例子,用这行我得到了同样的错误:

//With out UserName property
var usertemp = new ApplicationUser() {
    Profile_Id = "admin",
    Email = "rommelmeza@gmail.com",
    FirstName = "Rommel",
    LastName = "Meza",
    Password = model.Password,
    Active = true
};
var result = await UserManager.CreateAsync(usertemp, model.Password);
// Error Name cannot be null or empty

您需要显式添加用户名属性:

//With UserName property
var usertemp = new ApplicationUser() {
    Profile_Id = "admin",
    UserName = "rommelmeza@gmail.com",
    Email = "rommelmeza@gmail.com",
    FirstName = "Rommel",
    LastName = "Meza",
    Password = model.Password,
    Active = true
};
var result = await UserManager.CreateAsync(usertemp, model.Password);
// Success!!!

它对我有用。

相关内容

  • 没有找到相关文章