mahdi_negahi
دوشنبه 17 دی 1386, 00:42 صبح
سلام من برای ابراز هویت در سایت از مقاله ای که در CodeProject کردم با روش زیر
1- Web.Config
<authentication mode="Forms">
<forms name="MYWEBAPP.ASPXAUTH" loginUrl="Login.aspx" protection="All" ></forms>
</authentication>
<authorization>
<allow users="*"/>
</authorization>
و
<location path="ControlPanel">
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="User">
<system.web>
<authorization>
<allow roles="User"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
2- Global.asax
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated )
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticet = id.Ticket;
string userData = ticet.UserData;
string[] str_Roles = userData.Split('|');
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, str_Roles);
}
}
}
}
3 - تابع userLogin که کار چک کردن پسورد را انجام می دهد
public bool LoginProcessForUser(string Username , string Password)
{
FormsAuthentication.Initialize();
DataTable tbl_user = BLL.Select(UserName,Pass);
if (tbl_user.Rows.Count > 0)
{
DataRow row = tbl_user.Rows[0];
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, row["UserName"], DateTime.Now, DateTime.Now.AddMinutes(20), true, "Users|", FormsAuthentication.FormsCookiePath);
string Hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookies = new HttpCookie(FormsAuthentication.FormsCookieName, Hash);
if (ticket.IsPersistent) cookies.Expires = ticket.Expiration;
HttpContext.Current.Response.Cookies.Add(cookies);
string UserInformation = row["UserName"] + "|" + row["UserID"] + "|";
HttpCookie userInfo = new HttpCookie("userInfo", UserInformation);
HttpContext.Current.Response.Cookies.Add(userInfo) ;
return true;
}
return false;
}
return false;
}
مشکل از اینجا شروع شد که من کدامو گذاشتم در سایت کار نکرد
یعنی اینکه من Login کردم ولی شرط اول فایل global.asax برقرار نشد و در نتیجه Roles من به سیستم شناخته شند یعنی خط پایین همیشه NULL است
if (HttpContext.Current.User != null)
1- Web.Config
<authentication mode="Forms">
<forms name="MYWEBAPP.ASPXAUTH" loginUrl="Login.aspx" protection="All" ></forms>
</authentication>
<authorization>
<allow users="*"/>
</authorization>
و
<location path="ControlPanel">
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="User">
<system.web>
<authorization>
<allow roles="User"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
2- Global.asax
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated )
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticet = id.Ticket;
string userData = ticet.UserData;
string[] str_Roles = userData.Split('|');
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, str_Roles);
}
}
}
}
3 - تابع userLogin که کار چک کردن پسورد را انجام می دهد
public bool LoginProcessForUser(string Username , string Password)
{
FormsAuthentication.Initialize();
DataTable tbl_user = BLL.Select(UserName,Pass);
if (tbl_user.Rows.Count > 0)
{
DataRow row = tbl_user.Rows[0];
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, row["UserName"], DateTime.Now, DateTime.Now.AddMinutes(20), true, "Users|", FormsAuthentication.FormsCookiePath);
string Hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookies = new HttpCookie(FormsAuthentication.FormsCookieName, Hash);
if (ticket.IsPersistent) cookies.Expires = ticket.Expiration;
HttpContext.Current.Response.Cookies.Add(cookies);
string UserInformation = row["UserName"] + "|" + row["UserID"] + "|";
HttpCookie userInfo = new HttpCookie("userInfo", UserInformation);
HttpContext.Current.Response.Cookies.Add(userInfo) ;
return true;
}
return false;
}
return false;
}
مشکل از اینجا شروع شد که من کدامو گذاشتم در سایت کار نکرد
یعنی اینکه من Login کردم ولی شرط اول فایل global.asax برقرار نشد و در نتیجه Roles من به سیستم شناخته شند یعنی خط پایین همیشه NULL است
if (HttpContext.Current.User != null)