2010-01-29 8 views
9

मैं प्रपत्र प्रमाणीकरण का उपयोग कर रहा हूं और मूल लॉगऑन पेज और डिफ़ॉल्ट पृष्ठ है।फॉर्म प्रमाणीकरण सदस्यता। गेटयूसर() शून्य

जब मैं लॉगऑन पेज पर हूं, और साइनऑन पर कॉल करता हूं तो यह बहुत अच्छा काम करता है। हालांकि, जब भी मैं लॉगऑन पेज पर हूं Membership.GetUser() शून्य लौटाता है। जब मैं अपने डिफ़ॉल्ट पृष्ठ पर रीडायरेक्ट करता हूं, तो Membership.GetUser() मेरी उपयोगकर्ता जानकारी देता है।

क्या लॉगऑन पेज पर अभी भी मेरे उपयोगकर्ता को वापस करने के लिए यह तरीका प्राप्त करने का कोई तरीका है। मैंने पूरे Google पर पढ़ा है कि अन्य में समान समस्याएं हैं जहां यह केवल तभी काम करेगा जब आप रीडायरेक्ट करेंगे।

मुझे बताएं कि आपको और जानकारी चाहिए या नहीं।

bool authenticated = User.Identity.IsAuthenticated; 
      string username = User.Identity.Name; 

      MembershipUser user = Membership.GetUser(); 

मैं पीछे और केवल कोड में दोनों लॉगऑन पेज और डिफ़ॉल्ट पृष्ठ पर यह कोड डाल:

यहाँ मैं क्या सत्यापित करने के लिए जानकारी सेट किया जा रहा है उपयोग कर रहा हूँ का एक सरल कोड का टुकड़ा है डिफ़ॉल्ट पृष्ठ में मान होते हैं और दिखाते हैं कि प्रमाणीकरण प्रक्रिया निष्पादित होने के बाद इसे प्रमाणित किया जाता है।

उत्तर

11

ऐसा इसलिए हो सकता है क्योंकि आप अपने लॉगिन पृष्ठ पर अज्ञात उपयोगकर्ताओं को अनुमति देते हैं। इसलिए ब्राउज़र आवश्यकतानुसार इस पृष्ठ पर कोई और जानकारी भेजने को परेशान नहीं करता है।

MembershipUser user = Membership.GetUser(username); 
GenericIdentity identity = new GenericIdentity(user.UserName); 
RolePrincipal principal = new RolePrincipal(identity); 
System.Threading.Thread.CurrentPrincipal = principal; 
HttpContext.Current.User = principal; 
+0

यह वास्तव में समझ में आता है। चूंकि लॉगऑन पेज अज्ञात उपयोगकर्ताओं के लिए एकमात्र पृष्ठ है, इसलिए सिस्टम सदस्यता की जानकारी तब तक नहीं खींच सकता जब तक कि वह उस पृष्ठ पर न हो जिसके लिए प्रमाणीकृत उपयोगकर्ता की आवश्यकता होती है ... बहुत रोचक .. – CodeLikeBeaker

+3

बिल्कुल। लॉग इन करने से पहले आप कैसे लॉग इन कर सकते हैं? – Greg

+0

ठीक है, जानकारी के लिए धन्यवाद। मुझे पूरा यकीन है कि यह है। इसकी प्रशंसा करना। – CodeLikeBeaker

11

कुछ निम्नलिखित कोड है।

Membership.GetUser(HttpContext.Current.User.Identity.Name) 
+0

शानदार! यह उस उपयोगकर्ता को बनाने के लिए बहुत अच्छा काम करता है जिसे आपने वर्तमान उपयोगकर्ता को लॉगऑन में अभी मान्य किया है। मैंने यह अधिकार 'if (सदस्यता.ValidateUser (model.UserName, model.Password) ...'। धन्यवाद! – tig

2

मैं इस एक ही स्थिति में था, यहाँ क्या MVC 4 .NET 4.5 पर मेरे लिए काम किया है: प्रयास करने के लिए किसी और

2

मुझे एक समान समस्या थी और समस्या यह साबित हुई कि मैं वेब कॉन्फ़िगरेशन में प्रमाणीकरण विधि = फ़ॉर्म खो रहा था।

<system.web> 
    <authentication mode="Forms"/> 
    .... 

मत भूलना कि एक (मैं aspnet को एक पुरानी विरासत साइट पलायन गया था)

+0

यह मेरी समस्या को हल करता है - इसे ट्रैक करने में केवल 4 घंटे लग गए हैं, इसलिए धन्यवाद! –

+0

धन्यवाद @Etienne:) –

0

मैं इस मुद्दे था और पाया यह कई सदस्यता प्रदाताओं होने की वजह से था, इसलिए बजाय

Membership.GetUser() 

आप

Membership.Providers["MyMembershipProvider"].GetUser() 

या अधिक विशेष रूप

कोशिश कर सकते हैं
Membership.Providers["MyMembershipProvider"].GetUser(LoginCtrl.UserName, false)