UserManager.AddPasswordAsync()返回“名称不能为空或空”

时间:2014-02-24 14:42:17

标签: asp.net-mvc asp.net-identity

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

我扩展了VS2013搭建的帐户管理功能。

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

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

这个错误是什么意思?

我的ApplicationUser如下所示:

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;
    }
}

祝你好运 弗雷德里克

3 个答案:

答案 0 :(得分:6)

经过多次尝试,我终于解决了这个问题。错误消息是错误的,它来自数据库,意味着username字段为null但数据库需要它。

确保向db发送类似的用户名,例如:

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

通过运行update-database确保数据库在此之前是最新的。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您好我尝试复制您的问题,我认为错误不在您的ApplicationUser中。我认为问题是当你尝试创建用户时。因为在您的Person构造函数中,您将UserName指定为等于EMail(我认为您不需要那些行)。但Identity在创建实例之前验证UserName。我做了同样的例子,这行我得到了同样的错误:

//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

您需要显式添加UserName属性:

//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!!!

它适用于我。