2008-09-28 9 views
16

एएसपी.नेट वेब अनुप्रयोग परियोजना में Membership.GetUser(username) का उपयोग किये बिना मैं एएसपी.NET सदस्यता में UserId तक कैसे पहुंच सकता हूं?सदस्यता.GetUser() का उपयोग किये बिना मैं एएसपी.NET सदस्यता में UserId तक कैसे पहुंच सकता हूं?

UserIdUserName (System.Web.Profile.ProfileBase) के बगल में नामस्थान में शामिल किया जा सकता है?

+0

क्या आप इस कारण से विस्तार कर सकते हैं? – Kev

+1

जब मैं सदस्यता। GetUser() को कॉल करता हूं। ProviderUserKey को हर बार इस उपयोगकर्ता आईडी – GrZeCh

उत्तर

4

मैंने उपयोगकर्ताओं के प्रमाणीकरण को अपने आप लिखने का फैसला किया (बहुत सरल लेकिन यह काम करता है) और मुझे यह बहुत समय पहले करना चाहिए।

मेरे मूल प्रश्न प्रयोक्ता-आईडी के बारे में था और इसे से उपलब्ध नहीं है:

System.Web.HttpContext.Current.User.Identity.Name 
+1

अपनी पोस्ट के बाद, यदि आप Microsoft.AspNet.Identity का उपयोग करके आयात करते हैं; आपके पास User.Identity.GetUserId() –

13

क्या आपके पास UserId की आवश्यकता होने पर हर बार डेटाबेस कॉल सहेजने का आपका कारण है? यदि ऐसा है, तो जब मैं ASP.NET सदस्यता प्रदाता का उपयोग कर रहा हूं, तो मैं आमतौर पर एक कस्टम प्रदाता करता हूं जो मुझे उस कॉल को कैश करने की अनुमति देता है, या एक उपयोगिता विधि जिसे मैं कैश कर सकता हूं।

यदि आप इसे प्रोफ़ाइल में डालने की सोच रहे हैं, तो मुझे ऐसा करने के लिए बहुत अधिक कारण नहीं दिख रहा है, विशेष रूप से इसे अभी भी एक डेटाबेस कॉल की आवश्यकता होगी और जब तक कि आप एक कस्टम प्रोफ़ाइल प्रदाता का उपयोग नहीं कर रहे हैं, UserId को पार्स करने की अतिरिक्त प्रसंस्करण।

यदि आप सोच रहे हैं कि उन्होंने GetUserId विधि को क्यों लागू नहीं किया है, तो यह केवल इसलिए है क्योंकि आप हमेशा गारंटी नहीं देते हैं कि वह उपयोगकर्ता आईडी शामिल प्रदाता में GUID होगा।

संपादित करें:

देखें ScottGu's article on providers जो एक link to downloading the actual source code for i.e. SqlMembershipProvider प्रदान करता है।

लेकिन वास्तव में करने के लिए सबसे आसान चीज आपके उपयोगकर्ता ऑब्जेक्ट या यूटिलिटी क्लास में GetUserId() विधि है, जहां आपको उपयोगकर्ता आईडी को कैश/सत्र से मिलता है, अन्यथा डेटाबेस को हिट करें, उपयोगकर्ता नाम (या स्टोर द्वारा कैश करें) सत्र में), और इसे वापस करें।

अधिक कुछ पर विचार करें (लेकिन क्योंकि कुकी आकार प्रतिबंध के बहुत सावधान रहना होगा) के लिए: Forms Auth: Membership, Roles and Profile with no Providers and no Session

+0

को पुनर्प्राप्त करने के लिए डीबी को कॉल किया जाता है, आपके उत्तर के अंत में अच्छा छोटा लेख। –

0

आप यहाँ दो विकल्प हैं:

1) अपने उपयोगकर्ता डेटा तालिका के लिए प्राथमिक कुंजी के रूप उपयोगकर्ता नाम का प्रयोग यानी:

select * from [dbo.User] where Username = 'andrew.myhre' 

2) प्रोफ़ाइल में उपयोगकर्ता आईडी जोड़ें।

प्रत्येक विधि के लिए पेशेवर और विपक्ष हैं। व्यक्तिगत रूप से मैं पहले पसंद करता हूं, क्योंकि इसका मतलब है कि मुझे आउट ऑफ़ द बॉक्स प्रोफाइल प्रदाता को स्थापित करने की आवश्यकता नहीं है, और मैं वैसे भी अपने सिस्टम में अद्वितीय उपयोगकर्ता नाम लागू करना पसंद करता हूं।

0

एंड्रयू: मैं डिफ़ॉल्ट रूप से जो दिखाया गया है, उसके बारे में एक प्रश्न करने से सावधान रहूंगा, इसके साथ कोई मिलान नहीं है जिससे आप पूर्ण तालिका स्कैन का जोखिम चला सकें। इसके अलावा, यदि आप एक से अधिक एप्लिकेशन के लिए अपने उपयोगकर्ता डेटाबेस का उपयोग कर रहे हैं, तो आपने एप्लिकेशन आईडी शामिल नहीं की है।

निकटतम अनुक्रमणिका aspnet_Users_Index है जिसके लिए ApplicationId और LoweredUserName की आवश्यकता है।

संपादित करें:

उफ़ - एंड्रयू पद पुन: पढ़ने और वह aspnet_Users मेज पर एक का चयन करें * नहीं कर रहा है, बल्कि, एक कस्टम प्रोफ़ाइल/उपयोगकर्ता प्राथमिक कुंजी के रूप उपयोगकर्ता नाम का उपयोग तालिका।

0

क्या आपने System.Web.HttpContext.Current.User.Identity.Name का उपयोग करने का प्रयास किया है? (यह सत्यापित करना सुनिश्चित करें कि User और Identity पहले गैर-शून्य हैं।)

0
{ 
MembershipUser m = Membership.GetUser(); 
Response.Write("ID: " + m.ProviderUserKey.ToString()); 
} 

आप UserID (uniqueidentifier) ​​aspnet_Membership मेज से वर्तमान उपयोगकर्ता के लिए देना होगा - वर्तमान उपलब्ध कराने के सफलतापूर्वक लॉग इन किया है यदि आप <% =%> को प्रयास करते हैं या सफल प्रमाणीकरण से पहले उस मान को असाइन करते हैं तो आपको "ऑब्जेक्ट रेफरेंस ऑब्जेक्ट के इंस्टेंस पर सेट नहीं किया गया" त्रुटि मिलेगी।

http://www.tek-tips.com/viewthread.cfm?qid=1169200&page=1

22

इस प्रयास करें:

MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name); 
Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey); 
+0

उपयोगकर्ता नाम तक पहुंचने में निश्चित रूप से सहायता होगी, अन्यथा मैं वापस वापस आ रहा था! इसके लिए धन्यवाद। –

0

मैं इस समस्या थी, समाधान web.config विन्यास में है, इन के साथ web.config को विन्यस्त का प्रयास करें:

<roleManager 
      enabled="true" 
      cacheRolesInCookie="true" 
      defaultProvider="QuickStartRoleManagerSqlProvider" 
      cookieName=".ASPXROLES" 
      cookiePath="/" 
      cookieTimeout="30" 
      cookieRequireSSL="false" 
      cookieSlidingExpiration="true" 
      createPersistentCookie="false" 
      cookieProtection="All"> 
    <providers> 
    <add name="QuickStartRoleManagerSqlProvider" 
     type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
     connectionStringName="ASPNETDB" 
     applicationName="SecurityQuickStart"/> 
    </providers> 
</roleManager> 
2

कोशिश निम्नलिखित:

Membership.GetUser().ProviderUserKey 
1
public string GetUserID() 
      { 
       MembershipUser _User; 
       string _UserId = ""; 
       _User = Membership.GetUser(); 
       Guid UserId = (Guid)_User.ProviderUserKey; 
       return _UserId = UserId.ToString(); 
      }