PDA

View Full Version : مشکل با Form authentication در هاست



mahdi_negahi
یک شنبه 16 دی 1386, 23: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)

mahdi_negahi
دوشنبه 17 دی 1386, 10:33 صبح
نبود کسی.کمک

hamedgh
سه شنبه 18 دی 1386, 10:26 صبح
شما فقط این کدها را کپی کردین
چک کردین که بانک ساخته شده یا نه
اگر می توانی یک باasp.net configuration را یکبار باز کن تا تنظیمات لازم را بدهد

mahdi_negahi
سه شنبه 18 دی 1386, 12:09 عصر
دوست عزیز بنده تازه کار نیستم کدی که نوشتم در locall کار میکند

Behrouz_Rad
سه شنبه 18 دی 1386, 16:52 عصر
فایل Global.asax رو هم آپلود کردی؟

mahdi_negahi
سه شنبه 18 دی 1386, 17:08 عصر
بله من Publish کردم و dll آن را گذاشتم بالا

Behrouz_Rad
سه شنبه 18 دی 1386, 21:04 عصر
DLL رو نمیگم! خود فایل Global.asax

eworkpro
سه شنبه 18 دی 1386, 21:39 عصر
سلام.
والا ما هم از Form authentication استفاده می کنیم ولی هیچ کدوم از اینکارا رو که نمی کنیم .
تو فقط کافیه که تو کانفیک بری چند خط تغییرات ایجاد کنه دیگه کاری به هیچ چیز دیگه نداره .

فقط همین دو خط »

<authentication mode="Forms">
<forms name=".ASPXUSERDEMO" loginUrl="Index.aspx" protection="All" timeout="30"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>

mahdi_negahi
سه شنبه 18 دی 1386, 23:39 عصر
شما از کامپونت استفاده میکنید من به پیروی از ـآقای راد خودم استفاده پیاده سازی کردم

آقای راد یک چیزه جالب در windows XP درسته ولی در Vista نه . حتی Security هم Low کردم و اینکه Cookie هم ساخته می شود

بهروز جان Global.asax میدونی از کجا فهمیدم در هر شرط آن یک Response.Write گذاشتم که اجرا میشه در Xp ولی در ویستا نه

mp2009
چهارشنبه 19 دی 1386, 00:28 صبح
خب مهدی جان اگه در XP اجرا میشه که بی خیال Vista شو . چون بیشتر کاربران هنوز دست از XP بر نمیدارند

mahdi_negahi
چهارشنبه 19 دی 1386, 11:36 صبح
عزیز جان این یک برنامه است که روی هاست است و نمی شه به کاربران بگیم شما از ویستا استفاده نکنید

Behrouz_Rad
پنج شنبه 20 دی 1386, 17:31 عصر
ببین می تونی در Vista روی سیستم کوکی قرار بدی.
البته احتمالا مشکل از نسخه ی IE هست.

mahdi_negahi
پنج شنبه 20 دی 1386, 18:40 عصر
من در XP از IE 7 استفاده میکنم که در Vista همینه

ببین می تونی در Vista روی سیستم کوکی قرار بدی.
بهروز جان منظورت را نفهمیدم

Behrouz_Rad
پنج شنبه 20 دی 1386, 20:29 عصر
با کدنویسی در صفحت، یک کوکی رو روی سیستم کاربر قرار بده و مقدار اون رو بخون.
این صفحه رو در ویستا اجرا کن.