विफल करने का कारण बनता है यदि मैं उनके ईमेल पते को सत्यापित नहीं किया गया है तो उपयोगकर्ता को एक अलग कार्रवाई पर रीडायरेक्ट करने का प्रयास कर रहा हूं। बात यह है कि, मैं नहीं चाहता हूं कि वे लॉग आउट हो जाएं, मैं बस उन्हें रीडायरेक्ट करना चाहता हूं। जब मैं नियंत्रक के लिए ऑन-प्राधिकरण में ऐसा करता हूं, तो यह अपेक्षित के रूप में रीडायरेक्ट करता है, लेकिन उपयोगकर्ता प्रमाणीकृत नहीं है। मुझे यकीन नहीं है कि यह क्यों है। मेरा कोड इस तरह दिखता है:ऑन-प्राधिकरण में एमवीसी रीडायरेक्शन प्राधिकरण को
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
//_applicationService.CurrentUser is populated correctly at this point
// from Controller.User
if (_applicationService.CurrentUser != null)
{
if (_applicationService.CurrentUser.EmailVerified != true)
{
var url = new UrlHelper(filterContext.RequestContext);
var verifyEmailUrl = url.Action("EmailVerificationRequired", "Account", null);
filterContext.Result = new RedirectResult(verifyEmailUrl);
}
}
}
नोट: मैंने इसे स्पष्ट करने के लिए अनावश्यक कोड हटा दिया है। _applicationService.CurrentUser वर्तमान उपयोगकर्ता के साथ आबादी है - और जब उस बिंदु पर उपयोगकर्ता को सही ढंग से प्रमाणीकृत किया गया है। लेकिन रीडायरेक्ट के बाद उपयोगकर्ता अब प्रमाणीकृत नहीं है।
अंतर्निहित उपयोगकर्ता प्राधिकरण को प्रभावित किए बिना मैं इस रीडायरेक्ट को कैसे प्राप्त कर सकता हूं?
मैंने अपना कोड ऑनएक्शन एक्सेलिंग में डालने का प्रयास किया है, और मैंने इसे कस्टम एक्शनफिल्टर एट्रिब्यूट में भी लागू करने का प्रयास किया है, लेकिन जहां भी मैं इसे इस रीडायरेक्ट में डालता हूं, वहां 'उपयोगकर्ता' (यानी: सिस्टम। सुरक्षा। प्रिंसिपल प्रमाणीकृत प्राप्त करने से .IPrincipal नियंत्रक। उपयोगकर्ता)।
मुझे यहां क्या याद आ रही है? उम्मीद है कि यह समझ में आता है। किसी भी मदद की बहुत सराहना की।
अपना लॉगिन कार्रवाई के लिए डैरिन के अनुरोध के जवाब में:
[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
string errorMessage = "The username or password is incorrect";
if (ModelState.IsValid)
{
if (_contextExecutor.ExecuteContextForModel<LoginContextModel, bool>(new LoginContextModel(){
LoginViewModel = model
}))
{
ViewBag.CurrentUser = _applicationService.CurrentUser;
_formsAuthenticationService.SetAuthCookie(model.LoginEmailAddress, model.RememberMe);
if (_applicationService.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
return RedirectToAction("Index", "Home").Success("Thank you for logging in.");
}
else
{
errorMessage = "Email address not found or invalid password.";
}
}
return View(model).Error(errorMessage);
}
क्या आप दिखा सकते हैं कि आप उपयोगकर्ता को प्रमाणीकृत कैसे कर रहे हैं - आपकी 'लॉगऑन' कार्रवाई? –
@DarinDimitrov - मैंने अनुरोध के रूप में अपनी लॉगिन कार्रवाई को जोड़ा है। – soupy1976
यह वही है जो मैं ढूंढ रहा हूं! आपकी मदद के लिए बहुत समय बचाया – JosephDoggie