2012-03-12 11 views
6

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

"उपयोगकर्ता डेटा" वाले सभी तालिकाओं में एक idUser कॉलम है, इसलिए उपयोगकर्ता को अपने डेटा के साथ प्रस्तुत करने के लिए मुझे उपयोगकर्ता आईडी को बनाए रखने की आवश्यकता है।

पहले मैंने एक सत्र चर (एएसपी.नेट वेबफॉर्म) का उपयोग किया है, लेकिन जैसा कि मैं एमवीसी को वेबप्लिकेशंस को फिर से लिख रहा हूं, मैं पूछना चाहता हूं कि इसे आम तौर पर सबसे अच्छा तरीका माना जाता है।

क्या सत्र परिवर्तक आईडीयूसर को पकड़ने के लिए अभी भी सबसे अच्छी जगह है, या क्या मुझे एक कस्टम "Current.User.Identity" जोड़ना चाहिए जो उपयोगकर्ता नाम के अलावा एक सार्वजनिक उपयोगकर्ता भी है ??

या मुझे एक पूरी तरह से अलग दृष्टिकोण चुनना चाहिए?

उत्तर

3

मेरे पास एक ही सवाल था जब मैंने एमवीसी के लिए कस्टम सदस्यता प्रदाता लागू किया था। मैं दो चीजें कर रहा हूँ। मैं MembershipUser ऑब्जेक्ट के ProviderUserKey फ़ील्ड में उपयोगकर्ता का आईडी संग्रहीत करता हूं। provideruserkey देखें। फिर अपने प्रश्न का उत्तर देने के लिए, हाँ मैंने System.Web.Security.IPrincipal से एक कस्टम प्रिंसिपल बनाया है, हालांकि बाद में मुझे System.Web.Security.RolePrincipal से विरासत मिली क्योंकि मैं भूमिकाओं के लिए समर्थन चाहता था।

public class MyPrincipal : RolePrincipal 
{ 
    public Guid Id { get; set; } 

    public MyPrincipal(string providerName, IIdentity identity, Guid id) : base(identity) 
    { 
     Id = id; 
    } 
} 

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

+0

धन्यवाद! मैं एक समान दृष्टिकोण के बारे में सोच रहा था। हालांकि मैं उपरोक्त @ मार्क एस से सहमत हूं, लेकिन सबसे आसान बात सत्र वस्तु का उपयोग करना है। – Kman

+0

सत्र –

+0

सत्र से बचने के लिए जोड़ा गया विवरण सत्र आवश्यक रूप से बुरा नहीं है और यह एक आवश्यकता हो सकती है। अक्सर मैं उपयोगकर्ताओं को सत्र अक्षम करता हूं और कुकीज़ पर बहुत अधिक भरोसा करता हूं कि प्रत्येक HTTP अनुरोध के आकार में वृद्धि हो। एक साथ अनुरोध करने का एक और तरीका असिंक्रोनस कंट्रोलर का उपयोग करना है जो एमवीसी 4 बीटा में बहुत आसान है और पिछले संस्करणों में थोड़ा सा काम किया जा सकता है। – Mark

3

क्या आपके उपयोगकर्ता नाम अद्वितीय हैं? यदि ऐसा है तो UserId को बनाए रखने की कोई आवश्यकता नहीं है क्योंकि आप उपयोगकर्ता नाम द्वारा उपयोगकर्ता को पुनर्प्राप्त कर सकते हैं।

मेरी एमवीसी परियोजनाओं ने सदस्यता को कार्यान्वित किया है जो पारंपरिक वेब फॉर्म एप्लिकेशन के समान ही था। मुझे नहीं लगता कि जब तक आप एक स्टेटलेस रीस्ट टाइप एप्लिकेशन बनाने की कोशिश नहीं कर रहे हैं, तब तक दोनों को अलग-अलग देखने का कोई कारण नहीं है। आपने वेब फॉर्म में अपना UserId कैसे बनाए रखा? सत्र? फिर एमवीसी में सत्र का उपयोग करें। पहिया को फिर से शुरू करने का कोई कारण नहीं है।

बेशक यदि आपके पास बदलने के अन्य कारण हैं तो UserId को स्टोर करने के लिए बहुत सारे तरीके हैं। आप प्रमाणीकरण कुकी के UserData में इसे स्टोर कर सकते हैं। आप अपना खुद का प्रमाणीकरण टिकट भी बना सकते हैं जो उपयोगकर्ता आईडी के बजाय उपयोगकर्ता आईडी का उपयोग करता है। आप कुछ अतिरिक्त जानकारी स्टोर करने के लिए कस्टम प्रिंसिपल भी बना सकते हैं।

आप Forms Authentication Configuration and Advanced Topics की समीक्षा करना चाह सकते हैं। इस आलेख में प्रमाणीकरण टिकट में अतिरिक्त डेटा (UserId) संग्रहीत करना और कस्टम प्रिंसिपल बनाना शामिल है। दोनों विधियां आपकी आवश्यकताओं के अनुरूप होंगी।

+0

उपयोगकर्ता नाम अद्वितीय हैं, लेकिन मुझे उपयोगकर्ता की आवश्यकता है क्योंकि मेरे मॉडल (डेटाबेस) में पहचान कॉलम है। तो उस तालिका से डेटा प्राप्त करें जिसके साथ मुझे इसकी आवश्यकता है ... जहां userid = idUser। मैं आपके द्वारा प्रदान किए गए लिंक को देखूंगा :) – Kman

+0

सत्र आपके UserId को बनाए रखने का सबसे आसान और तेज़ तरीका है। एमवीसी का उपयोग निश्चित रूप से सत्र के उपयोग को रोकता नहीं है। मेरे 2 सेंट, सत्र का उपयोग करें। – Mark

+0

मैं सहमत हूं। यह मेरे वेबफॉर्म एप्लिकेशन में ठीक कर रहा है। मेरी मुख्य चिंता यह थी कि एमवीसी में यह दृष्टिकोण "पुराना" था। एक बार फिर धन्यवाद!:) – Kman

संबंधित मुद्दे