我的Linq-To-Sql映射中有一个User对象。当用户提交时,我想要反序列化一个密码属性 - 例如,在登录期间。但是,我从不想将此属性传递给用户,因为它将包含实际密码的加密版本,而我宁愿不公开有关密码或加密方法的任何信息。有没有办法在对象范围内告诉Linq-To-Sql在返回User对象时永远不会传递Password属性?
答案 0 :(得分:2)
我使用https进行加密,主要是因为只是在访问服务时,您默认强制执行加密,这样可以节省客户端代码。你有几个可能的答案:
如果您没有腌制和散列密码,请考虑一下。
答案 1 :(得分:0)
如果我从不想要序列化对象,最好挂钩OnSerializing事件。由于我使用的是Linq-To-Sql,我的DataContext的designer.cs已经捕获了OnSerializing事件,用于跟踪lazing加载实体引用的序列化状态。添加用[OnSerializing]
修饰的另一个函数会在System.ServiceModel.Activation中引发错误,因此我必须找到另一个路径。这是我的解决方案:
在DataContext.designer.cs中,我添加了
[global::System.Runtime.Serialization.OnSerializingAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(EditorBrowsableState.Never)]
public void OnSerializing(StreamingContext context)
{
this.serializing = true;
// custom function to handle my logic
this.ClearPassword();
}
在我的User.cs文件中,我有一个部分类定义。因此,我需要做的就是将ClearPassword方法添加到我的部分类定义中:
partial class User
{
private void ClearPassword()
{
this.Password = null;
}
//* OTHER CODE *//
}
现在,无论我如何与User对象进行交互,密码都不会根据需要传递给客户端。