我有一个usercontrol,负责呈现用户的创建和更改。 usercontrol绑定到RIA服务提供的实体:
[MetadataType(typeof(User.UserMetadata))]
public partial class User
{
internal class UserMetadata
{
protected UserMetadata() {}
[Required]
public string Name { get; set; }
[Exclude]
public string PasswordHash { get; set; }
[Exclude]
public int PasswordSalt { get; set; }
[Required]
public string ShortName { get; set; }
[Include]
public IEnumerable<UserRole> UserRoles { get; set; }
}
[DataMember]
[RegularExpression("^.*[^a-zA-Z0-9].*$", ErrorMessageResourceName = "BadPasswordStrength", ErrorMessageResourceType = typeof(ErrorResources))]
[StringLength(25, MinimumLength = 6)]
public string NewPassword { get; set; }
}
创建新用户时,需要使用“NewPassword”字段 - 但是在更改现有用户的属性时,它不是(用于密码更改)。
解决此问题的最佳方法是什么?我有几个想法,但他们都觉得有点蹩脚: - )
由于
答案 0 :(得分:1)
您似乎正在将当前密码传递回GUI。没有必要这样做。这会造成潜在的安全漏洞
建议您将密码更改视为单独的服务调用,而不仅仅是简单的记录编辑练习。 RIA服务支持 Invoke Operations ,它们基本上是对RIA服务的任意直接调用。对Invoke操作的唯一限制是它们不能返回复杂类型(这个例子不是问题)。
传递当前登录用户标识,当前密码(已编码)和新密码(已编码),然后执行所有工作服务器端。返回一个简单的成功布尔值。
只是一些建议,我很高兴看到其他人的想法:)