2013-10-25 218 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; } 
} 

基於這些特性,你應該有你需要充實的呈現邏輯您的視圖來覆蓋您上面描述的所有用例。讓我知道你是否需要進一步的指導。