2012-02-12 8 views
6

मैं एमवीसी के लिए नया हूं और वास्तव में सभी वेब विकास के लिए नया हूं। मेरे पास लगभग 7 वर्षों का विकास अनुभव है, लेकिन सेवाओं, डेटाबेस, ऑब्जेक्ट मॉडल आदि में मूल रूप से मध्य-स्तर और बैक-एंड विकास। मैं एएसपी.नेट सीखने की कोशिश कर रहा हूं और खुद के लिए एक निजी साइट के लिए एमवीसी 3 का उपयोग कर साइट बनाने का फैसला किया है। मैं इसे dotnet-hosts.com पर किसी खाते से होस्ट कर रहा हूं। यहां मेरा प्रश्न है ... मेरे पास कोई डोमेन नहीं है और मैं निर्मित सदस्यता प्रदाता का उपयोग करूँगा। मैंने देखा है में ऑटो कोड उत्पन्न कि बनाया गया था जब मैं विधि ChangePassword (ChangePasswordModel मॉडल) में AccountController में कोड की इस पंक्ति है कि वहाँ परियोजना टेम्पलेट जोड़ा ...एमवीसी 3 + उपयोगकर्ता के उपयोगकर्ता नाम पर वर्तमान लॉग इन कैसे करें

MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */); 

मेरा प्रश्न User.Identity.Name के आसपास विशेष रूप से है , ऐसा लगता है कि यह विंडोज उपयोगकर्ता नाम को वापस लौटाएगा जैसे कि Environment.UserName होगा। मेरे द्वारा उपयोग किए जाने वाले विजुअल स्टूडियो टेम्पलेट (मोबाइल रेडी एचटीएमएल 5 एमवीसी.नेट) है क्योंकि मैं किसी भी डिवाइस से ग्राहकों का समर्थन करने में सक्षम होना चाहता हूं ... विंडोज पीसी, ऐप्पल, विंडोज फोन, आईफोन, आदि ... यदि User.Identity.Name पर कॉल करें सही है तो मैं पूछना चाहूंगा कि यह उन डिवाइसों पर कैसे काम करता है जो विंडोज़ नहीं हैं? अगर मेरी धारणा सही है कि यह केवल एक डोमेन के साथ विंडोज कंप्यूटर के लिए काम करेगा तो मैं इसे कैसे प्राप्त कर सकता हूं? क्या मुझे शायद कुछ कैशिंग का उपयोग करने की ज़रूरत होगी? यदि ऐसा है तो मैं प्रमाणीकरण पृष्ठ से कैश कुंजी के रूप में उपयोग किए जाने के लिए उपयोगकर्ता नाम और उनके आईपी पते को पकड़ सकता हूं?

मेरा उच्च स्तरीय प्रश्न है ... मैं उपयोगकर्ता के उपयोगकर्ता नाम में वर्तमान लॉग इन कैसे प्राप्त करूं डिवाइस/प्लेटफॉर्म पर ध्यान दिए बिना? मुझे पता है कि यह सवाल शायद अच्छी तरह से लिखा नहीं गया है और समझना मुश्किल हो सकता है ... मैं इसके लिए क्षमा चाहता हूं। मैं वेब विकास के लिए नया हूं और अपने पैरों को गीला करने की कोशिश कर रहा हूं और नवीनतम तकनीक शुरू करना चाहता हूं।

उत्तर

4

जैसा कि आपने कहा था User.Identity.Name वास्तव में सही है। उपयोगकर्ताओं के नाम में लॉग इन करने के लिए। लेकिन आपके जैसे सदस्यता अनुभाग ने कहा, केवल विंडोज खाते प्रदान करता है। आप प्रत्येक परिदृश्य में काम करने के लिए, विंडोज खातों के उपयोगकर्ता के बिना समान उपयोग कर सकते हैं, और यदि मौजूद हो तो भी विंडोज़ के खिलाफ सत्यापित कर सकते हैं। यदि आप सदस्यता के बिना इसे कॉल करते हैं, और डिफ़ॉल्ट MVC3 टेम्पलेट का पालन करते हैं तो इसे ठीक काम करना चाहिए।

String Username = User.Identity.Name; 

जब आप पर लॉग ऑन करें, टेम्पलेट MVC3 का उपयोग कर, यह एक authcookie पैदा करता है। खाता नियंत्रक कोड देखें। यहां, इसमें दो पैरामीटर पारित किए गए हैं। उपयोगकर्ता नाम, और जारी रखने के लिए (जब ब्राउज़र बंद हो जाता है - लॉगिन अभी भी कैश किया जाता है)।

उपयोगकर्ता नाम एक स्ट्रिंग फ़ील्ड है, जिसे User.Identity.Name द्वारा कहा जाता है और वास्तव में, इसमें कुछ भी लगाया जा सकता है, और विंडोज लॉगिन से जुड़ा हुआ नहीं है।

आप अपनी इच्छित विधि के माध्यम से लॉगिन का परीक्षण कर सकते हैं, और यदि हां, तो ऑथकुकी विधि का उपयोग करके कुकी सेट करें। (इसकी लिखित)। और उपयोगकर्ता नाम को जो भी आप चाहते हैं उसे सेट करें। और यदि उपयोगकर्ता का आपका सत्यापन विफल रहता है, तो एक न बनाएं, और पृष्ठ पर वापस लाएं।

उदाहरण कोड देखें। यह सब स्मृति से है, क्योंकि मेरे पास संदर्भ के लिए मेरे पास कोड नहीं है। लेकिन यह सब खाता नियंत्रक, लॉगिन कार्रवाई में है।

जब कुकी सेट की जाती है, तो उपयोगकर्ता लॉगिन स्थिति सत्र के लिए कैश की जाती है। आपको यह सुनिश्चित करने की आवश्यकता होगी कि वेबपृष्ठ पर जाकर उपयोगकर्ता लॉग इन हो। अन्यथा लॉग इन में व्यर्थ होगा। यह नियंत्रक/कार्रवाई पर एक साधारण विशेषता है।

नोट: खाता/लॉगऑन नियंत्रक को ऐसा न करें, क्योंकि आप लॉगऑन पेज पर जाने में सक्षम नहीं होंगे, क्योंकि आप लॉग इन नहीं हैं।

[Authorize] 
public ActionResult DoSomething() 
{ 
    // ... 
} 

आशा है कि मैंने मदद की है।

6

कॉल सही है। User.Identity.Name जो भी प्रमाणीकरण प्रदाता उपयोग में है, द्वारा भरा जाता है - विंडोज प्रमाणीकरण, प्रपत्र प्रमाणीकरण, कुछ कस्टम प्रमाणीकरण प्रदाता, या जो भी हो। यह किसी विशिष्ट उपयोगकर्ता "प्रकार" से बाध्य नहीं है। प्रमाणीकरण प्रदाता की यह सुनिश्चित करने की ज़िम्मेदारी है कि Identity ऑब्जेक्ट प्रत्येक अनुरोध पर वर्तमान उपयोगकर्ता से मेल खाता है। आम तौर पर उस हिस्से को कुकीज़ और डेटाबेस के संयोजन का उपयोग करने का ख्याल रखा जाता है।

MVC टेम्पलेट ASP.NET के Membership वर्ग, जो बारी में एक सदस्यता प्रदाता का उपयोग करता का उपयोग करता है (हालांकि मैं टेम्पलेट के बाद से MVC 2 पर एक नज़र नहीं किया है) - उदाहरण के SqlMembershipProvider या ActiveDirectoryMembershipProvider के लिए - पूर्व भंडार आपके उपयोगकर्ताओं के एक SQL सर्वर डेटाबेस में प्रमाण-पत्र (उपयोगकर्ता नाम और पासवर्ड इत्यादि), बाद में सक्रिय निर्देशिका (यानी मुख्य रूप से विंडोज लॉगऑन) का उपयोग करता है। SqlMembershipProvider डिफ़ॉल्ट है, और एमवीसी एक स्थानीय SQLExpress डेटाबेस फ़ाइल का उपयोग अपने उपयोगकर्ता स्टोर के रूप में करने के लिए किया गया है।

टेम्पलेट प्रोजेक्ट में लागू प्रमाणीकरण प्रदाता FormsAuthentication का उपयोग करता है, जो एक साधारण HTML फॉर्म (LogOn व्यू में से एक) के माध्यम से लॉगिन प्रक्रिया करता है और उपयोगकर्ता को एन्क्रिप्टेड कुकी के माध्यम से साइन इन करता है। किसी भी मंच पर काम करता है।

फॉर्म्स प्रमाणीकरण और SqlMembershipProvider दोनों के लिए सेटअप web.config (साइट की जड़ में से एक) में पाया जा सकता है। वहां आप SQLExpress डेटाबेस के लिए कनेक्शन स्ट्रिंग्स पा सकते हैं (और उदाहरण के लिए यदि आवश्यक हो तो "वास्तविक" SQL सर्वर का उपयोग करने के लिए उन्हें बदलें), लॉग इन आदि के लिए टाइमआउट

(ध्यान दें कि आप आसानी से उस कॉन्फ़िगरेशन को बहुत कुछ कर सकते हैं विजुअल स्टूडियो में समाधान एक्सप्लोरर के टूलबार में "एएसपी.NET कॉन्फ़िगरेशन" बटन के माध्यम से एक जीयूआई में - यह पहले उपयोगकर्ताओं को स्थापित करने का एक आसान तरीका भी प्रदान करता है)।

संक्षेप में, यह जाने के लिए तैयार है - और गैर-विंडोज उपयोगकर्ताओं को लॉक नहीं करता है।

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

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