2009-06-29 12 views
23

हाय मैं एक कस्टम सदस्यता प्रदाता का उपयोग करता हूं।HttpContext.Current.User.Identity.Name हमेशा स्ट्रिंग है। लक्षण

मैं एक एप्लिकेशन परिदृश्य के दौरान वर्तमान उपयोगकर्ता नाम जानना चाहता हूं, लेकिन जब मैं HttpContext.Current.User.Identity.Name तक पहुंचने का प्रयास करता हूं तो यह हमेशा स्ट्रिंग देता है। लक्षण।

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); 
} 

क्या मुझे कुछ याद आ रही है?

+0

वह कोड काफी सरल लगता है। आप सुनिश्चित हैं कि उपयोगकर्ता प्रमाणीकृत है? प्रदाता को गतिशील रूप से या कुछ ऐसे बदलने के साथ कोई मजाकिया व्यवसाय? –

+0

कोई मजेदार bizniz, उपयोगकर्ता प्रमाणीकृत – Shimmy

+0

क्या आपने प्रमाणीकरण कुकी में उपयोगकर्ता नाम को FormsAuthentication.SetAuthCookie के साथ सेट किया था? –

उत्तर

34
FormsAuthentication.SetAuthCookie(tbUsername.Text, true); 
bool x = User.Identity.IsAuthenticated; //true 
string y = User.Identity.Name; //"" 
समस्या आपके पास

इस बिंदु आप केवल प्रमाणीकरण कुकी, IPrincipal रूपों प्रमाणीकरण मॉड्यूल के अंदर बनाया जाता है कि नहीं होगा जब तक वहाँ एक नया अनुरोध है स्थापित कर रहे हैं पर है - उस बिंदु पर तो HttpContext यूज़र एक अजीब स्थिति में है। एक बार रीडायरेक्ट होने के बाद, क्योंकि यह ब्राउज़र से एक नया अनुरोध है क्योंकि आपके पृष्ठ पर पहुंचने से पहले कुकी को पढ़ा जाएगा और सही उपयोगकर्ता ऑब्जेक्ट बनाया जाएगा।

अनुरोध पूर्ण होने के बाद कुकीज़ केवल ब्राउज़र पर सेट की जाती हैं।

एक अलग रूप में RedirectFromLoginPage वैसे भी एक रूपों प्रमाणीकरण कुकी बनाता है के रूप में, आप इसे करने की ज़रूरत नहीं मैन्युअल

+0

यह एक अच्छा मुद्दा है। क्या आप उसी पृष्ठ पर उपयोगकर्ता नाम के लिए परीक्षण कर रहे हैं जो कुकी सेट करता है/लॉगिन करता है? यदि हां, तो * बाद वाले * पृष्ठ पर HttpContext.Current.User.Identity की जांच करें। –

+0

बहुत अच्छा जवाब। लेकिन यह मेरी समस्या के साथ मुझे बहुत मदद नहीं करता है। मैं उपयोगकर्ता की भूमिका के आधार पर उपयोगकर्ता को किसी विशेष पृष्ठ पर रीडायरेक्ट करने में सक्षम होना चाहता हूं। एक व्यवस्थापक सीधे व्यवस्थापक पैनल, पृष्ठ का स्वागत करने के लिए एक सामान्य उपयोगकर्ता, किसी विशेष उपयोगकर्ता को एक विशेष उपयोगकर्ता के लिए एक उन्नत उपयोगकर्ता ... मुझे लॉगऑन एक्शन विधि के ActionResult निर्धारित करने के लिए User.IsInRole() का उपयोग करने की उम्मीद है ... लेकिन यह "इन एक अजीब स्थिति "जैसा कि आपने इसे रखा है :-) –

0

आप सदस्यता प्रदाता से उपयोगकर्ता के नाम के लिए देख रहे हैं, कुछ इस तरह की कोशिश ...

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

यदि मुझे उपयोगकर्ता की बजाय उपयोगकर्ता का नाम चाहिए, तो मैं बस सदस्यता.गेटयूसर() का उपयोग कर सकता हूं; : <| – Shimmy

8

HttpContext.Current.User.Identity.Name का मूल्य RedirectFromLoginPage करने के लिए कॉल द्वारा निर्धारित है। एक बार जब आप किसी नए पृष्ठ पर रीडायरेक्ट हो जाते हैं तो आप वर्तमान उपयोगकर्ता आईडी को HttpContext.Current.User.Identity.Name से प्राप्त कर सकते हैं। मुझे यकीन नहीं है कि आपको इस संदर्भ में उपयोगकर्ता प्रॉपर्टी के माध्यम से उपयोगकर्ता नाम तक पहुंचने की आवश्यकता क्यों होगी, क्या आप केवल tbUsername में शामिल मान का उपयोग नहीं कर सकते। टेक्स्ट?

19

कृपया System.Web.HttpContext.Current.Request.LogonUserIdentity.Name बजाय User.Identity.Name की कोशिश करते हैं। यह मेरे लिए काम किया।

+1

यह कुछ अलग है। जब मैं अपनी वेबसाइट पर यह मान पढ़ता हूं, तो मुझे अपना विंडोज खाता (एडी) मिलता है ... – Jowen

+1

यदि उपयोगकर्ता। Identity.Name खाली है और आप उम्मीद करते हैं कि यह नहीं होना चाहिए, लेकिन LogonUserIdentity.Name नहीं है, तो आपको कोई समस्या हो सकती है यदि आप विजुअल स्टूडियो से डिबगिंग कर रहे हैं तो अपने applicationhost.config के साथ। अधिक जानकारी के लिए मेरा एसओ सवाल देखें। http://stackoverflow.com/questions/19686933/logonuseridentity-name-vs-user-identity-name/19689343#19689343 – Jagd

+0

हाँ मैं जोवेन से सहमत हूं .. यह वही पहचान नहीं है जैसा कि पूछा गया था ... लेकिन यह अच्छा है कि मुझे लगता है कि सुलभ है। – ppumkin

1

जैसा कि पहले से ही FormsAuthentication.RedirectFromLoginPage() विधि सुझाया गया है, प्रमाणीकरण कुकी स्वचालित रूप से सेट करता है।

हालांकि मेरे मामले में, मैंने वेब अनुप्रयोगों को घोंसला किया था जहां मैंने web.config फ़ाइल में बाल अनुप्रयोग में <httpModules> टैग साफ़ कर दिया था (ताकि यह अपने मूल एप्लिकेशन से httpModules का वारिस न हो)। अवांछित माता-पिता httpModules को हटाकर सब कुछ फिर से काम करता है। आप URL रीराइट उपयोग कर रहे हैं

इसके बेहतर उलझी बातें :)

0

से पहले इस टैग की जाँच करें या अपने यूआरएल को बदलने के लिए है, यह कारण वापसी खाली अशक्त value.You से अपने URL के परिवर्तन पथ का प्रयास करना चाहिए हो सकता है। एचटीएमएल को .aspx या कोई विस्तार नहीं। यह मेरे मामले के लिए मुद्दा है। आप कोशिश करते हैं। मुझे उम्मीद है कि यह उपयोगी

2

वीएस कम्युनिटी 2015 संस्करण में, यदि आप वेब फॉर्म एप्लिकेशन बनाते हैं, तो यह स्वचालित रूप से फॉर्म प्रमाणीकरण को हटाने के लिए web.config नोड में कोड जोड़ता है, नीचे दिए गए अनुभाग को हटाने का प्रयास करें

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