8

तो, मैं एक एएसपी.नेट एमवीसी वेबसाइट बना रहा हूं।मैं ASP.NET MVC और SqlMembershipProvider का उपयोग करके अतिरिक्त उपयोगकर्ता विवरण कहां स्टोर करूं?

इसमें बहुत सारे फ़ील्ड के साथ एक काफी जटिल उपयोगकर्ता साइन-अप पृष्ठ है। मेरा सवाल है, मुझे यह कहां जारी रखना चाहिए? सदस्यता-प्रदाता उपकरण द्वारा बनाई गई उपयोगकर्ता सारणी में इन कॉलम शामिल नहीं हैं और मुझे प्रत्येक उपयोगकर्ता के बारे में इस अतिरिक्त जानकारी को संग्रहीत करने के मामले में सबसे अच्छा अभ्यास क्या है इसके बारे में उलझन में है?

क्या यह एक प्रोफ़ाइल प्रदाता खेलने में आता है? वो कैसे काम करते है? यदि नहीं, तो सदस्यता प्रदाता तालिका के स्टॉक कॉलम में प्रदान किए गए अतिरिक्त उपयोगकर्ता विवरणों को आप और कैसे जारी रखते हैं?

किसी को भी यह कैसे नियंत्रित किया जाता है पर कुछ संसाधनों के लिए मुझे बात कर सकते हैं, जब मैं उन्हें जरूरत है कि कैसे उन अतिरिक्त उपयोगकर्ता जानकारी तक पहुँचने के लिए, कैसे एक नया उपयोगकर्ता यह सब जानकारी आदि

उत्तर

1

CODE Magazine से इस article मदद की साथ बनाने के लिए मुझे इस मुद्दे के साथ।

3

यह वह जगह है जहां एएसपी.नेट प्रोफाइल प्रदाता आता है। आप इसे उपयोगकर्ता के बारे में जो भी प्रोफ़ाइल जानकारी चाहते हैं उसे स्टोर करने के लिए इसका उपयोग कर सकते हैं। आपको बस इतना करना है कि आपको web.config फ़ाइल, MSDN Link on how to configure the profile fields in web.config file में आवश्यक फ़ील्ड जोड़ें। आलेख को सारांशित करने के लिए, आप केवल उस नाम को टाइप करें और टाइप करें जिन्हें आप प्रोफ़ाइल तत्व के गुण नोड में संग्रहीत करना चाहते हैं।

<profile enabled="true"> 
    <properties> 
    <add name="Name" /> 
    <group name="Address"> 
     <add name="Street" /> 
     <add name="City" /> 
     <add name="Zip" type="System.Int32" /> 
    </group> 
    </properties> 
</profile> 

ASP.NET वेबफ़ॉर्म में, दृश्य स्टूडियो पूर्ण रूप से अपने एक जोरदार टाइप किया प्रोफ़ाइल वर्ग अपने कस्टम प्रोफ़ाइल गुण दर्शाएंगे कि बनाता है: यहाँ एक उदाहरण है। एमवीसी में, ऐसा नहीं होता है। किसी उपयोगकर्ता की प्रोफ़ाइल जानकारी का संदर्भ लेने के लिए, बस HttpContext.profile ["PropertyName"] पर कॉल करें। एक उदाहरण:

HttpContext.Profile["Name"] = name; 
HttpContext.Profile.GetProfileGroup("Address")["Zip"] = zip; 

संपादित करें: के रूप में एंडी बताया गया है, डिफ़ॉल्ट SqlProfileProvider का उपयोग कर वास्तव में अच्छा अगर आप इन गुणों पर प्रश्नों चलाना चाहते हैं नहीं है। वह पूरी तरह से सही है, और शायद मुझे मूल रूप से इस सीमा को ध्यान में रखना चाहिए था। यह सीमा मौजूद है क्योंकि SqlProfileProvider स्टोर सभी प्रोफाइल डेटा को तीन कॉलम में संग्रहीत करता है: PropertyNames और PropertyValuesString/PropertyValuesBinary। सभी कुंजी प्रॉपर्टी नाम फ़ील्ड में संग्रहीत हैं, मान जिन्हें स्ट्रिंग के रूप में संग्रहीत किया जा सकता है, PropertyValuesString फ़ील्ड इत्यादि में संग्रहीत किया जाता है। इसका मतलब यह है कि "एस्पनेट_Profile से चुनें *, जहां आयु> 10" जैसी क्वेरी करना बेहद मुश्किल है।

3

मुझे सच में यकीन नहीं है कि एक सर्वोत्तम अभ्यास है और यह वास्तव में इस बात पर निर्भर करता है कि आप जानकारी का उपयोग कैसे करना चाहते हैं।

सबसे पहले, आपको सदस्यता और प्रोफाइल दो अलग-अलग चीजों को पहचानना होगा। एएसपी.NET सदस्यता, प्रोफ़ाइल, और भूमिका कार्यक्षमता को कई साइटों/अनुप्रयोगों की सेवा करने के लिए एक सेवा के रूप में उपयोग करने के लिए डिज़ाइन किया गया है।

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

आप प्रोफाइल प्रदाता का उपयोग रयान के रूप में कर सकते हैं, लेकिन 1) उस जानकारी को आसानी से पूछताछ नहीं की जानी चाहिए कि आप प्रोफ़ाइल मीट्रिक एकत्र करना चाहते हैं और 2) यह सदस्यता/प्रोफ़ाइल सेवाओं के सभी उपभोक्ताओं में साझा किया जाता है। हालांकि, आप अपनी जरूरतों को पूरा करने के लिए इसे बढ़ा सकते हैं।

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

दूसरा विकल्प यह है कि आप इसे एक सेवा के रूप में देख सकते हैं और एएसपीनेट एसक्यूएल प्रदाता से उपयोगकर्ता आईडी का उपयोग करके अपने स्वयं के प्रोफाइल कार्यान्वयन में संदर्भित कर सकते हैं।

रोला से 4 लोगों पर Membership, Profiles, and Roles पर एक अच्छी श्रृंखला (16 भाग) है जो मैं पढ़ने की सिफारिश करता हूं और फिर, जब आप सभी चलती भागों से परिचित हो जाते हैं, तो शिक्षित निर्णय लें कि सबसे अच्छा स्टोर करें और उस प्रोफाइल जानकारी को कैसे व्यवस्थित करना है जिसे आप बनाना चाहते हैं।

2

मुझे पता है कि यह पोस्ट लंबे समय से पोस्ट किया गया है, और प्रश्न संदर्भ शायद एमवीसी 2 या उससे पहले के लिए था।

अब यह एमवीसी 3 है, और मैंने सोचा कि शायद एमवीसी 5 संदर्भ के लिए उत्तर मांगने वाले अन्य लोग इस समाधान में रूचि रख सकते हैं।

एक मानक mvc5 परियोजना व्यक्तिगत उपयोगकर्ता खाता सक्षम आप

// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. 
public class ApplicationUser : IdentityUser 
{ 
} 

बस इस के लिए और अधिक संपत्तियों में जोड़ सकते हैं {परियोजना} /Models/IdentityModel.cs में उपयोग के लिए निम्नलिखित कोड ब्लॉक तैयार मिलेगा है कि में कक्षा और गुण डेटाबेस ईजी में जारी रहेगा।

public class ApplicationUser : IdentityUser 
{ 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Email { get; set; } 
     public bool Active { get; set; } 
     public DateTime DateRegistered { get; set; } 
} 
संबंधित मुद्दे