asp.net mvc - Validating Captcha after server round-trip and subsequent re-generation of captcha -


मैं सेंडरसन की पुस्तक प्रो asp.NET MVC फ्रेमवर्क के अनुसार मेरे फॉर्म सबमिशन में कैप्चा को लागू कर रहा हूं ।

दृश्य फ़ील्ड इनके साथ उत्पन्न होते हैं:

  & lt;% = html.Captcha ("testcaptcha")% & gt; & Lt;% = Html.TextBox ("tryCaptcha")% & gt;  

VerifyAndExpireSolution हेल्पर काम नहीं कर रहा है क्योंकि उनका समाधान लागू है।

मैं सत्यापन जोड़ रहा हूं और जब यह विफल होता है तो मैं एक मॉडलस्टेट त्रुटि संदेश जोड़ता हूं और उपयोगकर्ता को वापस भेज देता हूं पुस्तक में बताए अनुसार:

<पूर्व> वापसी ModelState.IsValid? देखें ("पूर्ण", एपीपीटी): देखें ();

लेकिन, ऐसा करने से, एक नया GUID उत्पन्न करता है जो नए कैप्चा पाठ बनाता है

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

मैं यह सब करने के लिए नया हूँ, लेकिन इसके पहले पृष्ठ लोड से मूल्यों को बनाए रखने के साथ कुछ करना है।

< P> कैप्चा से उत्पन्न होता है:

  सार्वजनिक स्थिर स्ट्रिंग कैप्चा (यह HtmlHelper html, स्ट्रिंग का नाम) {// इस चुनौती स्ट्रिंग चुनौती देने के लिए GUID चुनेंगुइद = Guid.NewGuid ()। ToString ( ); // उत्पन्न करें और एक यादृच्छिक समाधान पाठ var सत्र = html.ViewContext.HttpContext.Session; सत्र [सत्रकेपीफाइक्स + चुनौतीगुइड] = मेकरेन्डमसोल्यूशन (); // एक & lt; आईएमजी & gt; विकृत पाठ के लिए टैग, // प्लस एक छिपे हुए फ़ील्ड को चुनौती देने के लिए GUID var urlHelper = new UrlHelper (html.ViewContext.RequestContext); स्ट्रिंग url = urlHelper.Action ("रेंडर", "कैप्चा इमेज", नया {challengeGuid}); वापसी स्ट्रिंग.फ़ॉर्मेट (इमेगाफ़ॉर्मेट, यूआरएल) + html.Hidden (name, challengeGuid); }  

और फिर मैं इसके साथ मान्य करने का प्रयास करता हूं:

  सार्वजनिक स्थिर बूल सत्यापन और एंटरप्राइज सोल्यूशन (एचटीटीपीटीन्टेक्सबेस संदर्भ, स्ट्रिंग चुनौतीगुईड, स्ट्रिंग का प्रयास किया गया) {// तुरंत हटायें पुनरावृत्ति हमलों स्ट्रिंग समाधान = (स्ट्रिंग) संदर्भ को रोकने के लिए सत्र से समाधान। सत्र [सत्र कीपफेिक्स + चुनौतीगुइड]; संदर्भ। सत्र। निकालें (सत्रकेपीफ़िक्स + चुनौतीगुइड); वापसी ((समाधान! = नल) & amp; }  

क्या ग्रिड के साथ लक्ष्य फ़ील्ड नामों को फिर से बनाना है? फिर, प्रत्येक फ़ील्ड अद्वितीय है और पिछली पीढ़ी के मूल्यों को नहीं बनाए रखेगा?

क्या मुझे एक अलग कैप्चा कार्यान्वयन की आवश्यकता है?

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

एक समाधान ब्राउज़र को असफल प्रयास के बाद पुनः लोड करते समय पृष्ठ को ताज़ा करने के लिए मजबूर करना है; यह तब नहीं होगा यदि आप अभी देखें () आप इसे रीडायरेक्ट टाईएक्शन ("SubmitEssay") का उपयोग कर कर सकते हैं जो एचटीपीवीर्ब्स को स्वीकार करने की क्रिया पद्धति को प्रभावित करेगा।

बेशक, आप अपने उपयोगकर्ता को त्रुटि के बारे में सूचित करने के लिए ViewData का उपयोग करने की क्षमता खो देते हैं, लेकिन आप बस क्वेरी स्ट्रिंग में इसे शामिल करें, फिर अपने संदेश को प्रदर्शित करने के लिए क्वेरी स्ट्रिंग की जांच करें।

इसलिए, पुस्तक के उदाहरण के बाद,

  यदि (! CaptchaHelper.VerifyAndExpireSolution ( HttpContext, Captcha, CaptchaAttempt) {RedirectToAction ("SubmitEssay", new {fail = 1})}}  

फिर जांचें कि क्या क्वेरी स्ट्रिंग संग्रह में आपका त्रुटि संदेश देने के लिए 'विफल' है।


Comments

Popular posts from this blog

sql - dynamically varied number of conditions in the 'where' statement using LINQ -

asp.net mvc - Dynamically Generated Ajax.BeginForm -

Debug on symbian -