使用Fluent NHibernate Persistence Tester工具和具有加密密码字段的对象

时间:2011-08-03 07:56:41

标签: unit-testing nhibernate fluent-nhibernate

首先:我对Fluent NHibernate完全不熟悉。

我有一个包含密码字段的User对象。设置该字段时,该值将被加密。现在我尝试使用

new PersistenceSpecification<User>(session)
    ...
    .CheckProperty(p => p.Password, "secret")
    ...
    .VerifyTheMappings();

持久性检查工具。我面临的问题是密码字段的处理。调试器告诉我该工具多次调用密码字段设置器。第一次用明文密码“秘密”。以下时间加密版本最终会多次加密我的密码。

知道如何应对这个问题吗?

2 个答案:

答案 0 :(得分:0)

编辑: NHibernate在从db加载后以及使用标准

时必须设置密码
Map(user => user.Password);

它将使用该属性来设置db-value

Map(user => user.Password).Access.CamelCaseField(Prefix.Underscore);

然后阻止这个

答案 1 :(得分:0)

解决此问题的方法是使用setter方法设置密码,例如

public virtual void UpdatePassword(string newPassword)
{
    string hashedPassword = HashPassword(newPassword);
    _password = hashedPassword;
}

这样,您的哈希/加密逻辑与您的属性设置器分开。在PersistenceSpecification测试中,您将测试加密文本的保存/获取。

如果您需要解密密码,请使用getter方法获取解密密码(Password属性将包含加密文本)。

public virtual string GetPasswordDecrypted()
{
    ...
}

作为旁注,除非你有充分的理由否则密码哈希比加密密码更好。