내가 ASP.NET MVC에 새로운 오전과 기존의 ASP.NET (웹폼)를 사용했다 그러나 ASP.NET MVC를 사용하여 사용자에 대한 로그인/인증 메커니즘을 구축하는 방법을 알지 못합니다.
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
string userName = Login1.UserName;
string password = Login1.Password;
bool rememberUserName = Login1.RememberMeSet;
if (validateuser(userName, password))
{
//Fetch the role
Database db = DatabaseFactory.CreateDatabase();
//Create Command object
System.Data.Common.DbCommand cmd = db.GetStoredProcCommand("sp_RolesForUser");
db.AddInParameter(cmd, "@Uid", System.Data.DbType.String, 15);
db.SetParameterValue(cmd, "@Uid", Login1.UserName);
System.Data.IDataReader reader = db.ExecuteReader(cmd);
System.Collections.ArrayList roleList = new System.Collections.ArrayList();
if (reader.Read())
{
roleList.Add(reader[0]);
string myRoles = (string)roleList[0];
//Create Form Authentication ticket
//Parameter(1) = Ticket version
//Parameter(2) = User ID
//Parameter(3) = Ticket Current Date and Time
//Parameter(4) = Ticket Expiry
//Parameter(5) = Remember me check
//Parameter(6) = User Associated Roles in this ticket
//Parameter(7) = Cookie Path (if any)
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now,
DateTime.Now.AddMinutes(20), rememberUserName, myRoles, FormsAuthentication.FormsCookiePath);
//For security reasons we may hash the cookies
string hashCookies = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies);
// add the cookie to user browser
Response.Cookies.Add(cookie);
if (HttpContext.Current.User.IsInRole("Administrators"))
{
Response.Redirect("~/Admin/Default.aspx");
}
else
{
string returnURL = "~/Default.aspx";
// get the requested page
//string returnUrl = Request.QueryString["ReturnUrl"];
//if (returnUrl == null)
// returnUrl = "~/Default.aspx";
Response.Redirect(returnURL);
}
}
}
}
protected bool validateuser(string UserName, string Password)
{
Boolean boolReturnValue = false;
//Create Connection using Enterprise Library Database Factory
Database db = DatabaseFactory.CreateDatabase();
//Create Command object
DbCommand cmd = db.GetStoredProcCommand("sp_ValidateUser");
db.AddInParameter(cmd, "@userid", DbType.String, 15);
db.SetParameterValue(cmd, "@userid", Login1.UserName);
db.AddInParameter(cmd, "@password", DbType.String, 15);
db.SetParameterValue(cmd, "@password", Login1.Password);
db.AddOutParameter(cmd, "@retval", DbType.Int16, 2);
db.ExecuteNonQuery(cmd);
int theStatus = (System.Int16)db.GetParameterValue(cmd, "@retval");
if (theStatus > 0) //Authenticated user
boolReturnValue = true;
else //UnAuthorized...
boolReturnValue = false;
return boolReturnValue;
}
저는 ASP.NET 코드를 MVC-esque 아키텍처로 변환하는 방법을 모르겠습니다. 여전히 ASP.NET MVC에서 인증을 구현하는 방법에 대한 손실이 있습니다.
무엇을해야합니까? ASP.NET MVC에서 위의 코드를 어떻게 구현합니까? 그 코드에서 나는 무엇을 놓치고 있습니까?
Aspnet mvc는 멤버쉽 구성 요소와 함께 제공되며, 어떤 기능이 엉망입니까? 시작하려면 http://www.codeplex.com/MvcMembership을 읽어보십시오 –
Jay Zeng과 강력하게 동의합니다. 회원 자격을 (잘못) 개혁하지 마십시오 : http://blogs.teamb.com/craigstuntz/2009/09/09/38390/ –
글쎄, 내가 원하는대로 맞춤 설정할 수 있습니까? 왜냐하면 필자는 HELP DESK 응용 프로그램을 개발하려고하고 관리자 만이 사용자를 만들 수 있기 때문에 등록이 공개가 아니기 때문에 내 사용자 테이블과 역할 테이블이 다릅니다. 이 방법으로 사용자 정의 할 수 있습니까? – user239684