10

मैं एक एमवीसी .NET अनुप्रयोग पर काम कर रहा हूं और मैं फॉर्म प्रमाणीकरण का उपयोग कर रहा हूं। मैं प्रमाणीकृत होने के बाद उपयोगकर्ता को उस पृष्ठ पर रीडायरेक्ट करना चाहता हूं जिसे उसने अनुरोध किया था। किसी भी सहायता की सराहना की जाएगी।प्रमाणीकरण के बाद अनुरोधित पृष्ठ पर रीडायरेक्ट

उत्तर

30

यदि आप एएसपी.नेट एमवीसी 3 या 4 इंटरनेट एप्लीकेशन प्रोजेक्ट बनाते हैं, तो इसका प्रमाणन होने पर रिटर्न यूआरएल का उपयोग करने का एक पूरा उदाहरण होगा।

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

public ActionResult Login(string returnUrl) 
{ 
    ViewBag.ReturnUrl = returnUrl; 
    return View(); 
} 

और फिर अपनी प्रवेश फार्म का मार्ग संग्रह में जोड़ना:

@*//ReSharper disable RedundantAnonymousTypePropertyName*@ 
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) { 
@*//ReSharper restore RedundantAnonymousTypePropertyName*@ 

} 

एक बार उपयोगकर्ता लॉगिन सबमिट करता है, यह सोचते हैं वहाँ से, आप यह का ट्रैक रखने के रूप में आप अपनी प्रवेश रूप को दिखाने की जरूरत है वे ठीक से प्रमाणित करते हैं, तो आप सिर्फ returnUrl पर रीडायरेक्ट करेंगे:

[HttpPost] 
public ActionResult Login(LoginModel model, string returnUrl) 
{ 
    return RedirectToLocal(returnUrl); 
} 

सबसे कठिन हिस्सा प्राप्त/पोस्ट अनुक्रम के माध्यम से ReturnUrl का ट्रैक रखने के है।

यदि आप देखना चाहते हैं कि AuthorizeAttribute कैसे काम करता है, this StackOverflow पोस्ट मूल अनुरोध के साथ returnUrl सेट करने से पता चलता है।

आपको यह सुनिश्चित करने की भी आवश्यकता है कि आप returnUrl को वास्तव में एक स्थानीय यूआरएल मान्य करते हैं, या आप पुनर्निर्देशन हमलों को खोलने के लिए कमजोर हो जाते हैं। RedirectToLocal() है कि इस मान्यता करता MVC 4 इंटरनेट आवेदन टेम्पलेट से एक सहायक विधि है:

private ActionResult RedirectToLocal(string returnUrl) 
{ 
    if (Url.IsLocalUrl(returnUrl)) 
    { 
      return Redirect(returnUrl); 
    } 
    else 
    { 
      return RedirectToAction("Index", "Home"); 
    } 
} 
+0

आपको बहुत बहुत धन्यवाद, यह काम कर रहा है अब :) –

+2

@HediNaily: याद करने के लिए एक बिंदु returnUrl और करने के लिए विश्वास नहीं है उपयोगकर्ता को रीडायरेक्ट करने के लिए इसका उपयोग करने से पहले इसे जांचें –

+2

@ mohsen.d सहमत। RedirectToLocal() एक एमवीसी 4 सहायक है जो इंटरनेट एप्लिकेशन टेम्पलेट के साथ शामिल है जो रीडायरेक्ट करने से पहले यूआरएल को मान्य करता है। मैं इसे सहायक विधि के बिना उन लोगों के उत्तर में जोड़ दूंगा। – mfanto