Asp.net mvc 사용자 로그 인 폼 확인 상세 설명

asp.net 뮤 직 비디오 가 자체 적 으로 가지 고 있 는 Authorize Attribute 필 터 를 사용 하여 사용자 의 신분 을 검증 할 수도 있 고 사용자 정의 필 터 를 사용 할 수도 있 습 니 다.절 차 는 모두 같 습 니 다.
첫 번 째 단계:asp.net mvc 프로젝트 를 만 들 고 프로젝트 의 AppStart 폴 더 아래 에 FilterConfig.cs 가 있 습 니 다.이 파일 에 전역 필 터 를 등록 할 수 있 습 니 다.저 희 는 파일 에 AuthorizeAttribute 필 터 를 다음 과 같이 추가 합 니 다.

public class FilterConfig
 {
  public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  {
   filters.Add(new HandleErrorAttribute());
   //                 
   filters.Add(new System.Web.Mvc.AuthorizeAttribute());
  }
 }

두 번 째 단계:웹.config 설정 파일 에서 사이트 의 인증 을 mode="Forms"로 수정 합 니 다.

<system.web>
 <!--Cockie  ,         url-->
 <authentication mode="Forms">
  <forms name="xCookie" loginUrl="~/Login/Index" protection="All" timeout="60" cookieless="UseCookies"></forms>
 </authentication>
 <compilation debug="true" targetFramework="4.5" />
 <httpRuntime targetFramework="4.5" />
 </system.web>


알림:최종 생 성 된 쿠키 의 이름 으로 name 값 을 설정 합 니 다.loginUrl 은 사용자 가 로그 인하 지 않 으 면 이동 하 는 페이지 로 지정 합 니 다.로그 인 페이지 에 도전 합 니 다.
세 번 째 단계:사용자 로그 인 관련 컨트롤 러 와 보기 추가
LoginController 컨트롤 러 생 성:

public class LoginController : Controller
 {
  [HttpGet]
  [AllowAnonymous]
  public ActionResult Index()
  {
   return View();
  }

  [HttpPost]
  [AllowAnonymous]
  public ActionResult Login(User user) 
  {
   if (!user.Username.Trim().Equals("liuxin") || !user.Password.Trim().Equals("abc"))
   {
    ModelState.AddModelError("", "        ");
    return View("index", user);
   }
   //if (!user.Username.Trim().Equals("liuxin")) {
   // ModelState.AddModelError("Username", "     ");
   // return View("index", user);
   //}
   //if (!user.Password.Trim().Equals("abc")) {
   // ModelState.AddModelError("Password", "    ");
   // return View("index", user);
   //}
   user.Id = Guid.NewGuid().ToString("D");//            id
   FormsAuthHelp.AddFormsAuthCookie(user.Id, user, 60);//  ticket         id,       60  
   return Redirect("~");
  }
  [HttpGet]
  public ActionResult Logout() {
   FormsAuthHelp.RemoveFormsAuthCookie();
   return Redirect("~/Login/Index");
  }
 }

특히 주의:Index 와 Login 두 가지 방법 은'[AllowAnonymous]'를 사용 하여 이 두 가지 방법 을 익명 으로 접근 할 수 있 음 을 알려 야 합 니 다.그렇지 않 으 면 필터 가 익명 으로 접근 할 수 없 기 때문에 로그 인 페이지 와 사용자 제출 이 불가능 합 니 다.분명히 이것 은 우리 가 보고 싶 은 것 이 아니다.
알림:이 사용자 의 데 이 터 를 테스트 하기 위해 죽 었 습 니 다.사용자 의 id 도 임시로 생 성 되 었 습 니 다.

public class User
 {
  public string Id { get; set; }
  public string Username { get; set; }
  public string Password { get; set; }
 }
로그 인 보기 만 들 기:

@{
 Layout = null;
 ViewBag.Title = "Index";
}
<h3>     ,   </h3>
@using(Html.BeginForm("Login", "Login", FormMethod.Post))
{
 @Html.Label("Username", "   :")@Html.TextBox("Username", null, new { id = "Username", placeholder = "      " })
 @Html.ValidationMessage("Username")<br/>
 @Html.Label("Password", "   :")@Html.TextBox("Password", null, new { id = "Password", placeholder = "     " })
 @Html.ValidationMessage("Password")<br/>
 <input type="submit" value="  " /> <input type="reset" value="  " />
 @Html.ValidationSummary(true)
}
알림:사용자 가 로그 인하 지 않 은 것 을 감지 하면 웹.config 에 설 정 된 url 페이지 로 이동 합 니 다.사용자 가 비밀 번 호 를 입력 하고 제출 할 때 사용자 가 입력 한 데 이 터 는 LoginController 컨트롤 러 의 Login 방법 에 제출 되 고 사용자 의 입력 을 검증 하 며 인증 실 패 는 로그 인 인터페이스 로 다시 돌아 갑 니 다.인증 이 성공 하면 실 행 됩 니 다.
<<***FormsAuthHelp.AddFormsAuthCookie(user.Id, user, 60);//ticket 어음 의 이름 을 사용자 의 id 로 설정 하고 유효 시간 을 60 분**>로 설정 합 니 다.이 문 구 는 ticket 어음 을 생 성하 고 쿠키 에 밀봉 하 는 역할 을 합 니 다.asp.net mvc 는 본 격 적 으로 이 쿠키 인증 사용자 가 로그 인 했 는 지 확인 합 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.
네 번 째 단계:사용자 정보 생 성 ticket 을 쿠키 에 밀봉 합 니 다.

public class FormsAuthHelp
 {
  /// <summary>
  ///             ticket    cookie (    )
  /// </summary>
  /// <param name="loginName">Forms            (        id,  ticket     )</param>
  /// <param name="userData">    </param>
  /// <param name="expireMin">   </param>
  public static void AddFormsAuthCookie(string loginName, object userData, int expireMin)
  {
   //             
   var data = JsonConvert.SerializeObject(userData);

   //    FormsAuthenticationTicket,               。
   var ticket = new FormsAuthenticationTicket(1,
    loginName, DateTime.Now, DateTime.Now.AddDays(1), true, data);

   //  Ticket,          。
   var cookieValue = FormsAuthentication.Encrypt(ticket);

   //          Cookie
   //FormsAuthentication.FormsCookieName         cookie  ,   ".ASPXAUTH"
   var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieValue)
   {
    HttpOnly = true,
    Secure = FormsAuthentication.RequireSSL,
    Domain = FormsAuthentication.CookieDomain,
    Path = FormsAuthentication.FormsCookiePath
   };
   //      
   if (expireMin > 0)
    cookie.Expires = DateTime.Now.AddMinutes(expireMin);

   var context = HttpContext.Current;
   if (context == null)
    throw new InvalidOperationException();

   //   Cookie
   context.Response.Cookies.Remove(cookie.Name);
   context.Response.Cookies.Add(cookie);
  }
  /// <summary>
  ///     ticket  
  /// </summary>
  public static void RemoveFormsAuthCookie() {
   FormsAuthentication.SignOut();
  }
 }

STEP 5:테스트 실행
1.사이트 시작 시 해당 사이트 주소 입력:아래 그림

2.이 때 사용자 가 로그 인하 지 않 으 면 로그 인 화면 으로 이동 합 니 다:아래 그림

3.잘못된 비밀 번 호 를 입력 하면 다시 로그 인 화면 으로 이동 하여 오류 알림

4.올 바른 아 이 디 비밀번호 입력

5.사용자 탈퇴 를 클릭 하면 쿠키 가 삭제 되 기 때문에 로그 인 화면 으로 이동 합 니 다.
소스 코드
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기