2013-01-10 21 views
13

में पासवर्ड बदलें मैं एएसपी.नेट एमवीसी 4 एप्लीकेशन बना रहा हूं। मैं प्रणाली के भीतर प्रमाणीकरण और प्रमाणीकरण का प्रबंधन करने के लिए सरल सदस्यता प्रदाता का उपयोग करता हूं। इस दृष्टिकोण में पासवर्ड बदलने के तरीके क्या हैं। मुझे एक चेंजपासवर्ड विधि मिली जो ऑपरेट करने के लिए मूल पासवर्ड सहित तीन पैरामीटर लेती है।एमवीसी 4

क्या उपयोगकर्ता के लिए वास्तव में मूल पासवर्ड जानने के बिना पासवर्ड को ओवरराइड/बदलने का कोई अन्य तरीका है?

+0

क्या आप पासवर्ड रीसेट फ़ंक्शन की तलाश नहीं कर रहे हैं? यदि उपयोगकर्ता को मूल पासवर्ड नहीं पता है, तो उन्होंने लॉग ऑन कैसे किया? और अगर वे लॉग ऑन नहीं हैं, तो वे किस उपयोगकर्ता का पासवर्ड बदल रहे हैं? – ProfK

उत्तर

18

जब कोई उपयोगकर्ता अपना पासवर्ड बदलना चाहता है तो चेंजपासवर्ड का उपयोग किया जाता है - और वर्तमान पासवर्ड यह सबूत है कि यह होने की अनुमति दें (सोचें पासवर्ड स्क्रीन)।

मुझे लगता है कि ऐसा करने का सबसे सीधा तरीका WebSecurity.GeneratePasswordResetToken() को कॉल करना है और परिणाम को वेब सुरक्षा में पास करना है। रीसेट पासवर्ड, नए पासवर्ड के साथ।

var token = WebSecurity.GeneratePasswordResetToken("UserName"); 
    var result = WebSecurity.ResetPassword(token, "NewPassword"); 
+0

बहुत धन्यवाद !!!! – Bartosz

4

how to implement password reset/change with SimpleMembership in MVC 4 here पर एक विस्तृत लेख है। इसमें स्रोत कोड भी शामिल है जिसे आप डाउनलोड कर सकते हैं।

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

लिंक के साथ ईमेल भेजने के लिए कोड इस तरह कुछ दिखाई देगा।

[AllowAnonymous] 
[HttpPost] 
public ActionResult ResetPassword(ResetPasswordModel model) 
{ 
    string emailAddress = WebSecurity.GetEmail(model.UserName); 
    if (!string.IsNullOrEmpty(emailAddress)) 
    { 
     string confirmationToken = 
      WebSecurity.GeneratePasswordResetToken(model.UserName); 
     dynamic email = new Email("ChngPasswordEmail"); 
     email.To = emailAddress; 
     email.UserName = model.UserName; 
     email.ConfirmationToken = confirmationToken; 
     email.Send(); 

     return RedirectToAction("ResetPwStepTwo"); 
    } 

    return RedirectToAction("InvalidUserName"); 
} 

यह एक जाल एपीआई कि आईडी है कि में पारित हो जाता है के रूप में टोकन स्वीकार करता है के लिए एक लिंक है कि एक ई-मेल बनाता है। वे लिंक पर क्लिक करते यह इस पद्धति पूरी करता है।

[AllowAnonymous] 
public ActionResult ResetPasswordConfirmation(string Id) 
{ 
    ResetPasswordConfirmModel model = new ResetPasswordConfirmModel() { Token = Id }; 
    return View(model); 
} 

यह क्रिया क्वेरी स्ट्रिंग से टोकन हो जाता है और ResetPasswordConfirmationModel उस दृश्य जो उपयोगकर्ता नया पासवर्ड दर्ज करने की अनुमति देता करने के लिए पारित हो जाता है में कहते हैं। नए पासवर्ड को यह सुनिश्चित करने के लिए दो बार दर्ज किया जाता है कि उन्होंने इसे सही तरीके से दर्ज किया है, जो पृष्ठ पर मान्य है। जब वे यह जानकारी जमा करते हैं तो उन्हें इस क्रिया के POST संस्करण में ले जाया जाता है जो वास्तव में पासवर्ड रीसेट करता है।

[AllowAnonymous] 
[HttpPost] 
public ActionResult ResetPasswordConfirmation(ResetPasswordConfirmModel model) 
{ 
    if (WebSecurity.ResetPassword(model.Token, model.NewPassword)) 
    { 
     return RedirectToAction("PasswordResetSuccess"); 
    } 
    return RedirectToAction("PasswordResetFailure"); 
} 
+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/निम्न गुणवत्ता वाले पदों/10490453) – skrrgwasme

+1

@skrrgwasme - अच्छा बिंदु। मैंने अपने अद्यतन उत्तर में प्रासंगिक विवरण जोड़े हैं। –