2013-02-21 20 views
6

से प्राप्त कर सकता हूं, मैं बस अपना परिदृश्य काम करने में मदद मांगा चाहता था? मैं पासवर्ड रीसेट टोकन का उपयोग कर उपयोगकर्ता नाम प्राप्त करना चाहता हूं।WebMatrix.WebData.WebSecurity - मैं केवल UserRame को पासवर्ड रीसेट टोकन

यह मेरा परिदृश्य है।

  1. मेरे पास मेरी वेबसाइट में एक पासवर्ड भूल गया है जो उपयोगकर्ता को पासवर्ड पासवर्ड भेजता है।
  2. मैं केवल पासवर्ड पासवर्ड स्ट्रिंग भेजना चाहता था।
  3. जब उपयोगकर्ता लिंक पर क्लिक करता है। मैं उपयोगकर्ता नाम प्राप्त करने के लिए अनुरोध ["टोकन"] से पूछता हूं और फिर उपयोगकर्ता को पासवर्ड और ऑटोलॉगिन बदलने की अनुमति देगा।

    public ActionResult ChangePassword() 
    { 
        ChangePasswordModel model = new ChangePasswordModel(); 
        string token=string.Empty; 
        try 
        { 
         token = Request["token"].ToString(); 
         int userId = WebSecurity.GetUserIdFromPasswordResetToken(token); 
    
         if (userId > 0) 
         { 
          //Get the user object by (userid) 
          //??????????????????? 
          //??????????????????? 
         } 
         else 
         { 
          throw new Exception("The change password token has expired. Please go to login page and click forgot password again."); 
         } 
        } 
        catch 
        { 
         model.HasError = true; 
         ModelState.AddModelError("", "The change password token has expired. Please go to login page and click forgot password again."); 
        } 
    
        return View(model); 
    } 
    

अग्रिम धन्यवाद:

इस नीचे मेरी कोड है।

उत्तर

9

इस आलेख के अंत में टिप्पणी को देखें: WebSecurity.GeneratePasswordResetToken Method

मैं आपकी सुविधा के लिए प्रासंगिक हिस्सा कॉपी कर देंगे:

उपयोगकर्ताओं को अपने पासवर्ड भूल गए हैं, वे एक नया एक अनुरोध कर सकते हैं। करने के लिए एक नया पासवर्ड प्रदान करते हैं निम्न कार्य करें:

  1. पासवर्ड-रीसेट पेज एक क्षेत्र जहां उपयोगकर्ता अपने ई मेल पता दर्ज कर सकता है बनाएँ।
  2. जब कोई उपयोगकर्ता पासवर्ड-रीसेट पृष्ठ में अपना ईमेल पता दर्ज कर चुका है, तो सत्यापित करें कि ईमेल पता मान्य उपयोगकर्ता का प्रतिनिधित्व करता है। यदि ऐसा होता है, तो जेनरेटपासवर्ड रीसेट टोकन (स्ट्रिंग, Int32) विधि को कॉल करके पासवर्ड रीसेट टोकन जेनरेट करें।
  3. एक हाइपरलिंक बनाएं जो आपकी साइट में एक पुष्टिकरण पृष्ठ को इंगित करता है और इसमें लिंक के URL में क्वेरी-स्ट्रिंग पैरामीटर के रूप में टोकन शामिल है।
  4. किसी ईमेल संदेश में किसी उपयोगकर्ता को लिंक भेजें। जब उपयोगकर्ता को ईमेल संदेश प्राप्त होता है, तो वह पुष्टिकरण पृष्ठ को आमंत्रित करने के लिए लिंक पर क्लिक कर सकता है।
  5. एक पुष्टिकरण पृष्ठ बनाएं जो URL पैरामीटर से टोकन निकालता है और जो उपयोगकर्ता को एक नया पासवर्ड दर्ज करने देता है।
  6. जब उपयोगकर्ता नया पासवर्ड सबमिट करता है, तो रीसेटपैसवर्ड (स्ट्रिंग, स्ट्रिंग) विधि को कॉल करें और पासवर्ड रीसेट टोकन और नया पासवर्ड पास करें। यदि टोकन मान्य है, तो पासवर्ड रीसेट होगा। यदि टोकन मान्य नहीं है (उदाहरण के लिए, यह समाप्त हो गया है), एक त्रुटि संदेश प्रदर्शित करें।

हाइलाइटिंग मेरा है। असल में आपको उपयोगकर्ता नाम की आवश्यकता नहीं है। ढांचा आपके लिए भारी भारोत्तोलन करता है।

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

वैसे भी, आप यह कर सकते हैं:

SimpleMembershipProvider provider = (SimpleMembershipProvider)Membership.Provider; 
string username = provider.GetUserNameFromId(userId); 

संदर्भ: GetUserNameFromId

+0

हाय ज़ेस्परी, आपको तुरंत प्रतिक्रिया के लिए धन्यवाद। लेकिन मैं चाहता था कि उपयोगकर्ता पासवर्ड बदलने के बाद लॉग इन हो। –

+0

@NETExperts: मैंने आपकी टिप्पणी को संबोधित करने के लिए उत्तर संपादित किया। –

+0

महान! यह जांच लेंगे। धन्यवाद। –

1

मुझे लगता है कि WebSecurity.GetUserIdFromPasswordResetToken(string token) विधि आप जो चाहते हैं वह करें।

अधिक जानकारी here

अद्यतन:

क्षमा करें, लेकिन मैंने देखा नहीं था कि आप पहले से ही है कि विधि का उपयोग कर रहे थे ... तो तुम उपयोगकर्ता नाम भी प्राप्त करना चाहते हैं और आप इकाई की रूपरेखा के कोड पहले माइग्रेशन का उपयोग कर रहे हैं, तो आप प्राप्त कर सकते हैं निम्न LINQ अभिव्यक्ति के साथ उपयोगकर्ता नाम:

string username = yourDbContext.UserProfiles.FirstOrDefault(up=>up.UserId == userId).Username; 
+0

ठीक है, मैं इसे आज़मा दूंगा। धन्यवाद –

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