Configure a database for membership services
membership services 를 제공하기 위해 Northwind 데이터베이스를 연결합니다. 이는 asp.net sql server setup 마법사를 통해 정의 합니다.
Configure forms authentication and membership provider
이제 연결자를 web.config 에 명시합니다.
<connectionStrings>
<add name="connstr" connectionString="data source=.\sqlexpress;
initial catalog=Northwind;integrated security=true"/>
</connectionStrings>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/account/login" defaultUrl="~/home/index"></forms>
</authentication>
...
</system.web>
여기서 인증없이 처음에 페이지 호출하게 되면 account 폴더 내부의 login 페이지로 이동합니다. 인증 후 에는 defaulturl 에 명시한 경로로 이동하게 됩니다. Membership 제공자를 사용하기 위해 아래와 같이 환경 정보를 기재합니다.
<membership defaultProvider="p1">
<providers>
<add name="p1" connectionStringName="connstr" type="System.Web.Security.SqlMembershipProvider" />
</providers>
</membership>
Create Account controller
이제 account 내부의 login() 함수를 기술 해 보겠습니다.
public ActionResult Login()
{
return View();
}
[HttpPost]
public JsonResult ValidateUser(string userid, string password,
bool rememberme)
{
LoginStatus status = new LoginStatus();
if (Membership.ValidateUser(userid, password))
{
FormsAuthentication.SetAuthCookie(userid, rememberme);
status.Success = true;
status.TargetURL = FormsAuthentication.
GetRedirectUrl(userid, rememberme);
if (string.IsNullOrEmpty(status.TargetURL))
{
status.TargetURL = FormsAuthentication.DefaultUrl;
}
status.Message = "Login attempt successful!";
}
else
{
status.Success = false;
status.Message = "Invalid UserID or Password!";
status.TargetURL = FormsAuthentication.LoginUrl;
}
return Json(status);
}
위에 LoginStatus 클래스는 아래와 같이 기술합니다. 속성에는 성공여부,나 메시지, 그리고 이동할 경로를 할당하여 json 형태로 제공해 줍니다.
public class LoginStatus
{
public bool Success { get; set; }
public string Message { get; set; }
public string TargetURL { get; set; }
}
Create Login view
로그인 디자인은 아래와 같습니다.
위에 구현한 validateuser() 컨트롤 함수에 파라미터값들을 json 형태로 전송합니다. 전송 후 받은 값은 success 에서 json 값으로 받아서 이를 parsing 하여 TargetURl 값을 얻어 인증 성공 후 이동할 경로값을 locaton 으로 이동하게 합니다.
$(document).ready(function () {
$("#login").click(function () {
$("#message").html("Logging in...");
var data = { "userid": $("#userid").val(),
"password": $("#password").val(),
"rememberme":$("#rememberme").prop("checked") };
$.ajax({
url: "/account/validateuser",
type: "POST",
data: JSON.stringify(data),
dataType: "json",
contentType: "application/json",
success: function (status) {
$("#message").html(status.Message);
if (status.Success)
{
window.location.href = status.TargetURL;
}
},
error: function () {
$("#message").html("Error while authenticating
user credentials!");
}
});
});
});
실행해서 성공하면 좌측처럼 보이며, 틀리면 우측화면처럼 보입니다.
Create Home controller and Index view
[Authorize]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
로긴한 사용자 이름을 출력하도록 기술해 봅니다.
<body>
<h1>Welcome @Membership.GetUser().UserName!</h1>
</body>
화면은 아래와 같습니다.
이를 테스트 하기 전에 사용자 계정을 추가해야 하는데요.이를 global.asax 에서 아래 처럼 간단하게 입력해서 테스트 할수도 있습니다.
protected void Application_Start()
{
...
MembershipCreateStatus status;
Membership.CreateUser("User1",
"some_password_here", "user1@somewebsite.com",
"question", "answer", true, out status);
}
감사합니다.
원문 : http://www.binaryintellect.net/articles/51a057aa-dd50-435c-96a1-31b1fc43b9d6.aspx