Asp.Mvc 2.0 사용자 서버 인증 실례 설명(4)

이 절 은 ASP.NET MVC 2.0 서버 에서 검 증 된 용법 을 설명 합 니 다.한 항목 이 JS 클 라 이언 트 로 만 검증 하 는 것 은 안전 하지 않 습 니 다.사용 자 는 JS 로 클 라 이언 트 인증 을 돌아 갈 수 없 기 때문에 서버 에서 검증 해 야 합 니 다.
서버 측 인증 에 대해 서 는 주로 System.Component Model.Data Annotations 네 임 스페이스 의 라 이브 러 리 를 호출 합 니 다.
우 리 는 이번에 도 등록 페이지 를 예 로 들 어 서버 측 검증 을 설명 하 는데 주로 등록 페이지 에 대해 다음 과 같은 검증 을 완성 합 니 다.
1.사용자 이름 이 비어 있 으 면 안 됩 니 다.
2.비밀 번 호 는 비어 있 으 면 안 되 고,비밀번호 길 이 는 5 자리 보다 작 으 면 안 됩 니 다.
3.비밀 번 호 는 비밀 번 호 를 확인 하 는 입력 과 같 아야 합 니 다.
4.메 일 형식 이 정확 해 야 합 니 다.
우리 먼저 효과 도 를 보 자.

MVC 에서 모든 필드 에 대한 검증 은 사실상 MODEL 층 에 검증 규칙 만 설정 하면 된다.
1.사용자 이름 인증
사용자 이름 에 대한 인증 은 사용자 이름 이 비어 있 지 않 은 것 만 검증 하면 됩 니 다.Required 속성 을 사용 하여 이 속성 을 MODEL 의 사용자 이름 필드 에 연결 하면 됩 니 다.

/// <summary> 
  ///     
  /// </summary> 
  [DisplayName("   ")] 
  [Required(ErrorMessage="       !")] 
  public string UserName 
  { get; set; } 
Required 안의 매개 변 수 는 구체 적 인 알림 정 보 를 표시 합 니 다.이때 사용자 이름 이 비어 있 으 면 프론트 데스크 톱 ASPX 페이지 에 사용자 이름 이 비어 있 으 면 안 된다 는 알림 이 나타 납 니 다.당연히 프론트 데스크 에 잘못된 알림 정 보 를 표시 해 야 한다.<%:Html.ValidationMessageFor(m=>m.UserName)%>표 시 를 사용 하면 프론트 데스크 에 잘못된 알림 정 보 를 표시 할 수 있 습 니 다.
2.비밀번호 검증
암호 인증 은 암호 가 비어 있 거나 암호 길이 가 제한 되 어 서 는 안 됩 니 다.
인증 암호 가 비어 있 는 것 은 인증 사용자 이름 이 비어 있 는 것 과 마찬가지 로 Required 속성 을 사용 합 니 다.
암호 의 길 이 를 확인 하려 면 StringLength 속성 을 사용 하 십시오.

/// <summary> 
  ///    
  /// </summary> 
  [DisplayName("  ")] 
  [Required(ErrorMessage="      ")] 
  [StringLength(10, ErrorMessage = "        5 ",MinimumLength=5)] 
  public string UserPwd 
  { 
   get; 
   set; 
  } 
StringLength 의 첫 번 째 매개 변 수 는 암호 의 최대 길 이 를 표시 하고 ErrorMessage 는 조건 이 충족 되 지 않 을 때의 오류 알림 정 보 를 표시 합 니 다.
최소 길이
물론 프론트 데스크 에 오류 정 보 를 표시 할 곳 이 있어 야 합 니 다.오류 정 보 를 표시 하려 면 다음 과 같이 사용 해 야 합 니 다.
<%:Html.ValidationMessageFor(m=>m.UserPwd)%>
3.비밀번호 와 비밀번호 가 일치 하 는 지 확인
비밀번호 와 비밀번호 가 일치 하 는 지 확인 하려 면 좀 복잡 합 니 다.인증 규칙 을 사용자 정의 해 야 합 니 다.사용자 정의 인증 규칙 은 ValidationAttribute 류 를 계승 하고 isvaild 방법 을 실현 해 야 합 니 다.

/// <summary> 
 ///                      
 /// </summary> 
 [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] 
 public class PwdMatch :ValidationAttribute 
 { 
 
  private object _typeid = new object(); 
  public string PWD { get; set; }//   
  public string ConfirmPwd { get; set; }//     
 
 
  public PwdMatch(string pwd, string confirmPwd) 
   : base() 
  { 
   PWD = pwd; 
   ConfirmPwd = confirmPwd; 
  } 
 
  /// <summary> 
  ///           
  /// </summary> 
  /// <param name="name"></param> 
  /// <returns></returns> 
  public override string FormatErrorMessage(string name) 
  { 
   return ErrorMessage; 
  } 
 
  /// <summary> 
  ///   TYPEID 
  /// </summary> 
  public override object TypeId 
  { 
   get 
   { 
    return _typeid; 
   } 
  } 
 
  /// <summary> 
  ///        
  /// </summary> 
  /// <param name="value">value      MODEL   MODEL </param> 
  /// <returns></returns> 
  public override bool IsValid(object value) 
  { 
   PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value); 
   object originalValue = properties.Find(PWD, true ).GetValue(value);//     
   object confirmValue = properties.Find(ConfirmPwd, true).GetValue(value);//         
   return Object.Equals(originalValue, confirmValue); 
 
  } 
 } 

 
 PwdMatch      ,        MODEL   ,         ,     
 [PwdMatch("UserPwd","ConfirPwd", ErrorMessage =" ¨¹ ? ®? ¨¡¤ ¨? ? £¤ ?")]
 public class RegisterModel
{
 
}

PwdMatch 의 첫 번 째 매개 변수 표 에 있 는 암 호 는 이름 이 RegisterModel 의 암호 속성 과 같 고 두 번 째 필드 는 암 호 를 확인 하 는 것 입 니 다.이름 은 RegisterModel 과 확인 암호 속성 이 같 으 며 마지막 매개 변 수 는 오류 알림 정보 입 니 다.
물론 프론트 데스크 에 오류 알림 정 보 를 표시 해 야 합 니 다.<%:Html.ValidationSummary(true,"사용®?집 이 무 너 지고 건물 이 무 너 지 는 바람 에...........................................................¹!")%>프론트 데스크 에 전체 오류 정보 목록 을 표시 할 수 있 습 니 다.
4.메 일 확인
메 일 박스 인증 은 주로 메 일 박스 형식 검증 입 니 다.형식 이 요구 에 부합 되 는 지 검증 합 니 다.메 일 박스 는 RegularExpressions 속성 을 사용 하면 됩 니 다.

/// <summary> 
  ///      
  /// </summary> 
  [DisplayName("  ")] 
  //[DataType(DataType.EmailAddress)] 
  [RegularExpression(@"^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$", ErrorMessage = "        ")] 
  public string Email 
  { 
   get; 
   set; 
  } 
첫 번 째 매개 변수 메 일 인증 의 정규 표현 식,두 번 째 매개 변 수 는 오류 알림 정보 입 니 다.
ASPX 페이지 에 오류 정보 표시 용<%:Html.ValidationMessageFor(m=>m.Email)%>
이상 은 사용자 등록 정보 에 대한 검증 입 니 다.물론 저 희 는 정 보 를 제출 할 때 검증 통과 여 부 를 판단 해 야 합 니 다.저 희 는 ModelState.IsValid 를 사용 하여 검증 통과 여 부 를 판단 하고 TRUE 는 통과,FALSE 는 통과 되 지 않 았 음 을 표시 합 니 다.
model 코드:

/// <summary> 
 ///     MODEL 
 /// </summary> 
 [PwdMatch("UserPwd", "ConfirPwd", ErrorMessage = "        ")] 
 public class RegisterModel 
 { 
  /// <summary> 
  ///     
  /// </summary> 
  [DisplayName("   ")] 
  [Required(ErrorMessage="       !")] 
  public string UserName 
  { get; set; } 
 
  /// <summary> 
  ///    
  /// </summary> 
  [DisplayName("  ")] 
  [Required(ErrorMessage="      ")] 
  [StringLength(10, ErrorMessage = "        5 ",MinimumLength=5)] 
  public string UserPwd 
  { 
   get; 
   set; 
  } 
 
  [DisplayName("    ")] 
  [Required(ErrorMessage="        !")] 
  [StringLength(10, ErrorMessage = "          5 ",MinimumLength=5)] 
  public string ConfirPwd 
  { 
   get; 
   set; 
  } 
  /// <summary> 
  ///      
  /// </summary> 
  [DisplayName("  ")] 
  //[DataType(DataType.EmailAddress)] 
  [RegularExpression(@"^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$", ErrorMessage = "        ")] 
  public string Email 
  { 
   get; 
   set; 
  } 
 
  
 } 
 
  
 /// <summary> 
 ///                      
 /// </summary> 
 [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] 
 public class PwdMatch :ValidationAttribute 
 { 
 
  private object _typeid = new object(); 
  public string PWD { get; set; }//   
  public string ConfirmPwd { get; set; }//     
 
 
  public PwdMatch(string pwd, string confirmPwd) 
   : base() 
  { 
   PWD = pwd; 
   ConfirmPwd = confirmPwd; 
  } 
 
  /// <summary> 
  ///           
  /// </summary> 
  /// <param name="name"></param> 
  /// <returns></returns> 
  public override string FormatErrorMessage(string name) 
  { 
   return ErrorMessage; 
  } 
 
  /// <summary> 
  ///   TYPEID 
  /// </summary> 
  public override object TypeId 
  { 
   get 
   { 
    return _typeid; 
   } 
  } 
 
  /// <summary> 
  ///        
  /// </summary> 
  /// <param name="value">value      MODEL   MODEL </param> 
  /// <returns></returns> 
  public override bool IsValid(object value) 
  { 
   PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value); 
   object originalValue = properties.Find(PWD, true ).GetValue(value);//     
   object confirmValue = properties.Find(ConfirmPwd, true).GetValue(value);//         
   return Object.Equals(originalValue, confirmValue); 
 
  } 
 } 
프론트 페이지 코드

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MvcLogin.Models.RegisterModel>" %> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
 <title>    </title> 
 <script type="text/javascript" src="../../Scripts/jquery-1.4.1-vsdoc.js"></script> 
 <script type="text/javascript" src="../../Scripts/jquery.validate.js"></script> 
 <script type="text/javascript"> 
//  $().ready(function () { 
//   $("#form1").validate( 
//  { 
//   rules: 
//   { 
//    UserName: 
//    { 
//     required: true 
//    }, 
//    UserPwd: 
//    { 
//     required: true, 
//     minlength: 6 
//    }, 
//    ConfirPwd: 
//    { 
//     required: true, 
//     minlength: 6, 
//     equalTo: "#UserPwd" 
 
//    }, 
//    Email: 
//    { 
//     email: true 
//    } 
 
//   }, 
//   messages: 
//   { 
//    UserName: 
//    { 
//     required: "<span style='color:red'>       ! </span>" 
//    }, 
 
//    UserPwd: 
//    { 
//     required: "<span style='color:red'>      !</span>", 
//     minlength: jQuery.format("<span style='color:red'>        {0}   !</span>") 
//    }, 
//    ConfirPwd: 
//    { 
//     required: "<span style='color:red'>        !<span>", 
//     minlength: jQuery.format("          {0}   !"), 
//     equalTo: "<span style='color:red'>         !</span>" 
 
//    }, 
//    Email: 
//    { 
//     email: "<span style='color:red'>         !</span>" 
//    } 
//   }, 
//   onkeyup: false 
//  }); 
 
//  }); 
 </script> 
</head> 
<body> 
 <div> 
 <br /> 
 
 <p style="font-size:12px;color:red"> 
 
 <%if (ViewData["msg"] != null) 
  {%> 
 <%:ViewData["msg"]%> 
 <%} %> 
 </p> 
 <br /> 
 <p> 
  <%:Html.ValidationSummary(true,"      !") %> 
 </p> 
 <%Html.BeginForm("Register", "user", FormMethod.Post, new { name="form1",id="form1"}) ; %> 
 
 
  <table> 
   <tr> 
    <td><%: Html.LabelFor(m => m.UserName) %></td> 
    <td> <%: Html.TextBoxFor(m => m.UserName) %></td> 
    <td><%:Html.ValidationMessageFor(m=>m.UserName) %></td> 
   </tr> 
 
    <tr> 
    <td> <%: Html.LabelFor(m => m.UserPwd) %></td> 
    <td> <%: Html.PasswordFor(m => m.UserPwd) %></td> 
    <td><%:Html.ValidationMessageFor(m=>m.UserPwd) %></td> 
   </tr> 
 
    <tr> 
    <td> <%: Html.LabelFor(m => m.ConfirPwd) %></td> 
    <td> <%: Html.PasswordFor(m => m.ConfirPwd)%></td> 
    <td><%:Html.ValidationMessageFor(m=>m.ConfirPwd) %></td> 
   </tr> 
 
    <tr> 
    <td> <%: Html.LabelFor(m => m.Email) %></td> 
    <td> <%: Html.TextBoxFor(m => m.Email) %></td> 
    <td><%:Html.ValidationMessageFor(m=>m.Email) %></td> 
   </tr> 
 
    <tr> 
    <td> <input type="submit" value="  " /></td> 
    <td></td> 
    <td></td> 
   </tr> 
 
 
  </table> 
 
 
 
 <%Html.EndForm(); %> 
  
 </div> 
</body> 
</html> 
컨트롤 러 코드

/// <summary> 
 ///      
 /// </summary> 
 /// <param name="model"></param> 
 /// <returns></returns> 
 [HttpPost] 
 public ActionResult Register(Models.RegisterModel model) 
 { 
  if (ModelState.IsValid) 
  { 
   //     
   bool result = false; 
   if (!new Models.SqlHelper().ExistUser(model)) 
   { 
    result = new Models.SqlHelper().AddUser(model); 
   } 
 
   if (result) 
   { 
    //         
    FormsService.SignIn(model.UserName, false); 
    return RedirectToAction("index"); 
   } 
   else 
   { 
    //       
    ViewData["msg"] = "      "; 
    return View(model); 
   } 
 
  } 
  else 
  { 
   //      
   //       
   ViewData["msg"] = "      "; 
   return View(model); 
  } 
 }
이상 은 Asp.Mvc 2.0 사용자 서버 검증 사례 의 실현 전 과정 입 니 다.이전 클 라 이언 트 검증 과 결합 하여 연습 할 수 있 기 를 바 랍 니 다.이 글 이 Asp.Mvc 2.0 검증 기능 을 파악 하 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기