首先:我对Fluent 和 NHibernate完全不熟悉。
我有一个包含密码字段的User对象。设置该字段时,该值将被加密。现在我尝试使用
new PersistenceSpecification<User>(session)
...
.CheckProperty(p => p.Password, "secret")
...
.VerifyTheMappings();
持久性检查工具。我面临的问题是密码字段的处理。调试器告诉我该工具多次调用密码字段设置器。第一次用明文密码“秘密”。以下时间加密版本最终会多次加密我的密码。
知道如何应对这个问题吗?
答案 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()
{
...
}
作为旁注,除非你有充分的理由否则密码哈希比加密密码更好。