2013-10-25 165 views
1

什么被认为是最佳做法下面的例子:视图验证的MVC最佳实践?

  • 更改密码 - 正常,输入用户名,当前密码,新密码,确认密码
  • 更改密码 - 密码恢复,电子邮件有链接,进入此发送一个包含可以说用户名和新系统改变密码的参数的页面,View只显示新密码并确认密码。
  • 更改密码 - 上面的链接有一个无效PARAM并显示该链接被打破

这些是3个独立的看法?或者具有多个路线选项的相同视图?

ActionResult ChangePassword() 
ActionResult ChangePassword(string token) 
{ 
// if bad token show this error view partial? set viewdata item and let cshtml decide what to show? 
} 

或者是这样的情况不是真的那么合乎逻辑吗?

回答

3

我会把它分成2页:

更改密码

  • 用户总是进入旧密码和新的,新的二次确认
  • 没有必要让用户名,因为他们应该是已经过身份验证
  • 不允许网址参数预先填充值
  • 使用CSRF令牌

重置密码

  • 只连接到来自电子邮件有效的唯一PARAM
  • 用户只有输入新密码,两次确认
  • 没有必要让用户名,网址PARAM通过电子邮件设置已识别用户
  • 请勿使用URL参数发送其他内容,例如临时密码或用户名
  • 没有必要使用CSRF令牌,其他独特的PARAM已经对伪造块

这两个页面似乎进行不同的操作,以至于我相信你会使用不同的视图,动作变得更好,&查看模型。如果你到最后,重构去除重复没有任何问题,但我会预测它们不会像你预期的那样相似。

1

我认为ASP.NET MVC的最佳验证将是Validation Attributes您想要验证的属性。

2

我想你可以摆脱单一的视图,你只需要建立一个足够强大的视图模型:

public class ChangePasswordViewModel(){ 
    public string OldPasswordHash {get; set;} //Remember never to store password in clear text 
    public string NewPassword{ get; set; } 
    public string RecoveryToken { get; set; } 
} 

基于这些特性,你应该有你需要充实的呈现逻辑您的视图来覆盖您上面描述的所有用例。让我知道你是否需要进一步的指导。