为什么WebSecurity会忽略我的密码?

时间:2013-09-16 09:03:55

标签: asp.net-mvc asp.net-mvc-4 asp.net-membership membership-provider

我已将SimpleMembership配置为使用我自己的表用于用户数据Occupant表,如下所示:

WebSecurity.InitializeDatabaseConnection("EstatesContext", "Occupant", "Id", "UserName", autoCreateTables: true);

在注册事件中,传递此表的数据,如下所示:

WebSecurity.CreateUserAndAccount(
    model.UserName,
    model.Password,
    propertyValues: new { 
        IdNumber = model.IdNumber,
        Surname = model.Surname,
        FirstName = model.FirstName,
        Type = model.Type,
        IsActive = model.IsActive,
        EMailAddress = model.EmailAddress                            
    });

当我尝试注册新用户时,出现以下错误:

  

无法将值NULL插入“密码”列表中   'XTimeEstates.dbo.Occupant';列不允许空值。插入   失败。

SimpleMembership哈希并将传递给CreateUserAndAccount的密码存储在其他地方吗?意思是我不应该明确存储任何密码数据?还是别的错了?

1 个答案:

答案 0 :(得分:2)

简单成员资格提供程序将用户密码存储在“webpages_Membership”表中(这是由框架自动生成的,除非禁用),因此如果您的“Occupant”表具有不可为空的密码字段,则需要将其作为propertyValues构造中的附加值。据说,由于简单成员资格提供者负责处理,因此不需要占用者表中的密码字段。 Simple Membership所需的只是一个字段,用于在传递给InitializeDatabaseConnection的任何表中存储UserId和UserName。