سؤال

ومرحبا يمكنني استخدام MembershipProvider المخصصة.

وأريد أن أعرف اسم المستخدم الحالي خلال تطبيق السيناريو، ولكن عندما أحاول الوصول HttpContext.Current.User.Identity.Name دائما يعود string.Empty.

if (Membership.ValidateUser(tbUsername.Text, tbPassword.Text))
{
    FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
    bool x = User.Identity.IsAuthenticated; //true
    string y = User.Identity.Name; //""
    FormsAuthentication.RedirectFromLoginPage(tbUsername.Text, cbRememberMe.Checked);
}

وأنا شيء مفقود؟

هل كانت مفيدة؟

المحلول

FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
bool x = User.Identity.IsAuthenticated; //true
string y = User.Identity.Name; //""

والمشكلة لديك هي في هذه المرحلة كنت تقوم فقط ملف تعريف الارتباط مصادقة، وIPrincipal أن يحصل على خلق داخل وحدة مصادقة النماذج لن يحدث إلا إذا كان هناك طلب جديد - حتى في هذه النقطة HttpContext.User في حالة غريبة. مرة واحدة تتم عملية إعادة التوجيه بعد ذلك، لأنه طلب جديد من متصفح الكوكي سوف تحصل على قراءة قبل صفحتك يتم التوصل إلى والكائن المستخدم الصحيح بإنشائه.

ويتم تعيين الكوكيز فقط على المتصفح بعد اكتمال الطلب.

وباعتبارها RedirectFromLoginPage جانبا يخلق الكعكة أشكال المصادقة على أي حال، لا تحتاج إلى القيام بذلك يدويا

نصائح أخرى

يرجى محاولة System.Web.HttpContext.Current.Request.LogonUserIdentity.Name بدلا من User.Identity.Name. لأنها عملت لي.

ويتم تعيين قيمة HttpContext.Current.User.Identity.Name في الدعوة إلى RedirectFromLoginPage. يمكنك الحصول على هوية المستخدم الحالي من HttpContext.Current.User.Identity.Name مرة تتم إعادة توجيهك إلى صفحة جديدة. لست متأكدا لماذا كنت في حاجة للوصول إلى اسم المستخدم من خلال خاصية العضو في هذا السياق، لا يمكن لك فقط استخدام القيمة الموجودة في tbUsername.Text؟

وفي VS الجماعة 2015 نسخة، إذا قمت بإنشاء تطبيق نماذج الويب، فإنه تلقائيا إضافة رموز في عقدة Web.config لإزالة FormsAuthentication، حاول إزالة أدناه المقطع

<modules>
  <remove name="FormsAuthentication"/>
</modules>

وأما طريقة FormsAuthentication.RedirectFromLoginPage() اقترح بالفعل، يحدد مصادقة كوكي تلقائيا.

ولكن في حالتي، كنت قد تتداخل تطبيقات الويب حيث كنت قد مسح العلامة <httpModules> في تطبيق طفل (بحيث لا يرث httpModules من تطبيق الأم) في ملف web.config. إزالة httpModules الأم غير المرغوب فيها جعل كل شيء العمل مرة أخرى.

وأفضل لتحقق هذه العلامة قبل تعقيد الأمور:)

إذا كنت تبحث عن اسم المستخدم من موفر العضوية، حاول شيئا من هذا القبيل ...

var user = Membership.GetUser( HttpContext.Current.User.Identity.Name );

إذا كنت تستخدم كتابة URL أو تغيير URL الخاص بك، فقد يكون السبب يرجع خائبا لاغية value.You أن تحاول مسار تغيير URL الخاص بك من هتمل ل.ASPX أو لا شيء extendtion. هذا هو مشكلة بالنسبة لي case.You try.I نأمل أن يكون هذا مفيدا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top