PDA

View Full Version : مشکل در استفاده از user.identity.name



hamhik
پنج شنبه 24 اسفند 1385, 14:40 عصر
با سلام
من از دستور user.identity.name استفاده می کنم تا وقتی که کاربر login شد نام کاربری اش را نشان دهد و به او خوشامد بگوید اما وقتی که از این دستور استفاده می کنم قسمت مربوط به owner بانک اطلاعاتی من رو نمایش می ده البته اینم بگم که در webconfig هم هنوز چیزی مربوط به تشخیص هویت کاربران ننوشتم آیا اصلا برای نمایش نام کاربری دستوری در webconfig باید نوشته شود ؟؟؟؟اشکال کار در کجاست؟؟در vs2003 من چنین مشکلی نداشتم یعنی وقتی کاربر لاگین می شد نام کاربری اش رو نمایش می داد اما در vs2005 این مشکل رو پیدا کردم

iman_22a
پنج شنبه 24 اسفند 1385, 15:32 عصر
اگر به تاپیک های آقای راد در این مورد نگاه کنید و طبق اون عمل کنید حتما به جواب می رسید
جستجو کنید ، پیدا خواهید کرد

hamhik
یک شنبه 12 فروردین 1386, 12:24 عصر
من جستجو کردم ولی چیزی دستگیرم نشد

Behrouz_Rad
یک شنبه 12 فروردین 1386, 14:07 عصر
مقدار Identity.Name از طریق روال Application_AuthenticateRequest فایل Global.asax استخراج میشه که در این روال، عملیات بازیابی کوکی تصدیق هویت، استخراج نام کاربری و مجوزها انجام می پذیره و در نهایت به شکل یک GenericPrincipal به Context جاری اعمال میشه.

موفق باشید.

hamhik
سه شنبه 14 فروردین 1386, 09:40 صبح
چیزی که گفتین رو انجام دادم ولی باز هم نام owner بانک اطلاعاتی را نمایش می دهد؟؟؟باز هم تاکید می کنم که در webconfig دستوری ننوشتم

Behrouz_Rad
سه شنبه 14 فروردین 1386, 09:57 صبح
اگر Web.Config رو پیکربندی نکنی که Forms Authentication معنا نداره!
در Web.Config هست که تو مشخص می کنی چه صفحاتی نیاز به تصدیق هویت دارند و از طریق باعث میشی تا روال Application_AuthenticateRequest فراخوانی بشه...

موفق باشید.

hamhik
چهارشنبه 15 فروردین 1386, 09:30 صبح
مشکلم هنگام لاگین کاربر حل شد که برای اون این کدها رو نوشتم
در فایل global


Protected Sub Application_AuthorizeRequest(ByVal sender As

Object, ByVal e As System.EventArgs)
Application.Add("user", "مهمان")
Application.Set("user", User.Identity.Name)
End Sub

و در page_load هر صفحه از دستور زیر استفاده کردم


lbluser.text=application.get("user")

و در دکمه ی مربوط به خروج دستور زیر را گذاشتم


formsauthentication.signout()

ولی نمی دونم چرا با اجرای این دستور کاربر به طور واقعی signout نمی شه یعنی همواره آخرین کاربر لاگین شده وجود دارد و اگه کاربری وارد سایت بشه بدون انجام لاگین می تونه وارد یوزر آخرین کاربر شودمحتویات فایل وب کانفیگ هم به صورت زیر است


<authentication mode ="Forms"/>
</system.web>
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>

که فکر می کنم به جای استفاده از application باید از session استفاده کرد ولی دستور set مربوط به session با چه خصوصیتی صورت می گیره؟

Behrouz_Rad
چهارشنبه 15 فروردین 1386, 10:52 صبح
برادر! شما اگر این مقاله ی معروف رو بخونی به اصل ماجرا پی میبری!
http://www.codeproject.com/aspnet/formsroleauth.asp

Alireza_Salehi
چهارشنبه 15 فروردین 1386, 11:58 صبح
برادر! شما اگر این مقاله ی معروف رو بخونی به اصل ماجرا پی میبری!
http://www.codeproject.com/aspnet/formsroleauth.asp

در این مقاله معروف یک نکته وجود داره که زیاد در موردش توضیح نداده و اون userData در سازند FormsAuthenticationTicket هست و اون این که گفته در این حالت نام Role رو قرار میدیم!

MSDN هم تنها چیزی که گفته اینه : The user-specific data to be stored with the ticket.

البته من یه سیستمی با این روش طراحی کردم که کار هم میکنه ومشکلی ندارم.فقط این پارامتر در این حالت برای شناساندن Role استفاده شده،حالا می خوام ببینم کاربرد های دیگه این پارامتر چیه- البته غیر از چیز های دلخواهی که میشه درونش قرار داد؟

Behrouz_Rad
چهارشنبه 15 فروردین 1386, 12:05 عصر
اصلی ترین کارش همون قرار دادن Role هست چون در روال Application_AuthenticateRequest که بازیابی کوکی تصدیق هویت برای ایجاد GenericPrincipal انجام میپذیره، پارامتر دوم GenericPrincipal باید حاوی Role کاربر باشه.
البته در صورتی که در تمامی پروژه تنها یک Role داری، می تونی در UserData اطلاعات دیگری قرار بدی و در پارامتر دوم GenericPrincipal، یک عبارت دلخواه رو وارد کنی.

موفق باشید.

hamhik
پنج شنبه 16 فروردین 1386, 11:45 صبح
وقتی userو pass توسط کاربر درست وارد می شه باید اون به چه صفحه ای هدایت شود از این مقاله استفاده کردم اما هنگامی که user و pass رو درست وارد می کنم ارور زیر را می دهد


HTTP Error 404 - Not Found.

یه سوال دیگه هم در مورد این مقاله داشتم این بود که فکر می کنم دو تا صفحه طراحی کرده یکی به نام login.aspx اما نام صفحه ی دیگر ذکر نشده چون آخرین قسمت همین مقاله کدهای زیر رو نوشته که اصلا مشخص نیست باید اون ها را کجا قرار داد



<html>
<head>
<title>Welcome</title>
<script runat="server">
protected void Page_Load(Object sender, EventArgs e)
{
if (User.IsInRole("Administrator"))
AdminLink.Visible = true;
}
</script>
</head>
<body>
<h2>Welcome</h2>
<p>Welcome, anonymous user, to our web site.</p>
<asp:HyperLink id="AdminLink" runat="server"
Text="Administrators, click here." NavigateUrl="administrators/"/>
</body>
</html>


که البته من این کدها را در صفحه ای با نام default قرار دادم

و سوال دیگه ای هم که داشتم در مورد اون کوکی ها ست و اون returnurlکه در صفحه ی login نوشته آیا این کوکی ها به این معنی هستند که اگر پس از 10 دقیقه کاربر هنوز در سایت بود اگر صفحه ی قبلی وجود نداشته باشه به صفحه ی login رود یا نه؟؟؟


و معنی این خط اصلا چیه(عبارت داخل کروشه)


string returnUrl = Request.QueryString["ReturnUrl"];

Alireza_Salehi
پنج شنبه 16 فروردین 1386, 12:43 عصر
وقتی userو pass توسط کاربر درست وارد می شه باید اون به چه صفحه ای هدایت شود
هر جایی که دلتون می خواد!

از این مقاله استفاده کردم اما هنگامی که user و pass رو درست وارد می کنم ارور زیر را می دهد
اگر دقیقا بر طبق مراحلی که گفته پیش برید نباید مشکلی پیش بیاد !



<html>
<head>
<title>Welcome</title>
<script runat="server">
protected void Page_Load(Object sender, EventArgs e)
{
if (User.IsInRole("Administrator"))
AdminLink.Visible = true;
}
</script>
</head>
<body>
<h2>Welcome</h2>
<p>Welcome, anonymous user, to our web site.</p>
<asp:HyperLink id="AdminLink" runat="server"
Text="Administrators, click here." NavigateUrl="administrators/"/>
</body>
</html>
برای پیاده سازی عملکرد این کدی که گذاشتید از LoginView استفاده کنید خیلی بهتر و راحت تره کد نویسی هم نمی خواد.


و سوال دیگه ای هم که داشتم در مورد اون کوکی ها ست و اون returnurlکه در صفحه ی login نوشته آیا این کوکی ها به این معنی هستند که اگر پس از 10 دقیقه کاربر هنوز در سایت بود اگر صفحه ی قبلی وجود نداشته باشه به صفحه ی login رود یا نه؟؟؟
اون جایی که کوکی رو میسازه (for a persistent user cookie) مقدار true گذاشته یعنی حتی در صورتی که مرورگر بسته بشه تا اون زمان مورد نظر سپری نشه شما هنوز Login هستید. ولی اگر False استفاده کنید به محض بستن مرورگر بدون توجه به زمان کوکی غیر معتبر میشه.


و معنی این خط اصلا چیه(عبارت داخل کروشه)
این برای اینه که اگر قبل از Login خواستید وارد صفحه ای شوید که مجاز نیستید و به صفحه Login هدایت شدید بعد از Login کردن دوباره برگردید همون جایی که بودید.

hamhik
پنج شنبه 16 فروردین 1386, 20:38 عصر
حالا وقتی کاربر با موفقیت در صفحه ی default لاگین شد من می خوام که username کاربر در یک label قرار گیرد آیا باید برای این کار از همان دستور user.identity.name استفاده کنم چون توی مقاله این قسمت توضیح داده نشده بود

با عرض شرمندگی

Alireza_Salehi
پنج شنبه 16 فروردین 1386, 21:07 عصر
بله...

به کنترل های LoginName(واسه نشان دادن نام کاربر در صورتی که Login کرده باشه) ، LoginView (واسه نمایش کنترل ها بر اساس نوع نقش کاربر ، عضو یا غیر عضو و ...) و LoginStatus (برای ایجاد دکمه ورود و خروج) هم یه نگاهی بندازید کارتون رو راحت تر میکنه.