ASP.NET MVC - CustomeAuthorize إجراء التصفية باستخدام موقع خارجي عن loggin في المستخدم

StackOverflow https://stackoverflow.com/questions/835672

سؤال

لدي CustomeAuthorize عمل فلتر توجيه المستخدم إلى صفحة تسجيل الدخول إذا لم يكن المستخدم مصادقة.تطبيق هذا الفلتر على الإجراءات أو وحدات تحكم.

[CustumeAuthorize]
public ActionResult MyAction()
{
   //do something here
   return View();
}

و تصفية يبدو مثل هذا:

public class CustomAuthorizeAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        if (!currentUserIsAuthenticated)
        {

            filterContext.Result =
                new RedirectToRouteResult(
                    new RouteValueDictionary{{ "controller", "Account" },
                                                 { "action", "SignIn" },
                                                 { "returnUrl",    filterContext.HttpContext.Request.RawUrl }
                                                });
        }
        else
        {
            base.OnActionExecuting(filterContext);
        }
    }
}

بمجرد تعيين قيمة من اللجنة المستقلة.النتيجة بعد تنفيذ تصفية انتهاء التنفيذ (بطريقة أو بأخرى؟!) توجيهك إلى تسجيل الدخول والعمل MyAction لا تنفذ.هذا هو بالضبط ما أريد.

يقولون الآن أريد أن أغير CustomAuthorize لمصادقة المستخدم ضد موقع خارجي وليس بلدي ستغنى العمل لذلك أنا أفعل شيئا من هذا القبيل:

public class CustomAuthorizeAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        if (!currentUserIsAuthenticated)
        {
             filterContext.HttpContext.Response.Redirect("http://externalSite.com/login?returnUrl=" + filterContext.HttpContext.Request.RawUrl);
        }
        else
        {
            base.OnActionExecuting(filterContext);
        }
    }
}

مشكلتي هي أنه بعد تنفيذ النسخة الثانية من CustomAuthorize تصفية الانتهاء من تنفيذ تواصل MyAction وهو ليس ما أريد!كيف يمكنني إيقاف تنفيذ MyAction بعد التصفية في هذه الحالة ؟

-تحديث- لقد عدت للتو عبر قضية جديدة.بلدي MVC التطبيق هو في iFrame و أريد إعادة توجيه إلى القوة الحالية الإطار حسب الإطار الرئيسي بعد توجيه ، لذلك أنا أفعل شيئا مثل:

string url = "http://externalSite.com/login?returnUrl=" + filterContext.HttpContext.Request.RawUrl;
filterContext.HttpContext.Response.Write("<script type=\"text/javascript\">\ntop.location.href = \"" + url + "\";</script>");

هل هناك طريقة لتمرير جافا سكريبت RedirectResult()?

هل كانت مفيدة؟

المحلول

استخدام RedirectResult مماثلة إلى كيف كنت تستخدم RedirectToRouteResult قبل أن يستبدل النتيجة في تصفية السياق.

filterContext.Result = new RedirectResult("http://externalSite.com/login?returnUrl=" + filterContext.HttpContext.Request.RawUrl );

نصائح أخرى

دعني أرى ما إذا كنت أفهم - لديك iFrame, عمل وتنفيذها ضمن هذا الإطار.تريد إعادة توجيه إلى صفحة الوالدين ، ليس ضمن هذا الإطار?

أنا فقط استخدام إعادة توجيه(url) في العمل الخاص بك.

يمكنك إضافة حكم مسج على صفحة تسجيل الدخول.

$(function () {
        if (window != top) {
            top.location.href = location.href;
        }
    });   

أو

تحرير 'من اللجنة المستقلة.نتيجة' العمل 'OnActionExecuting'

filterContext.Result = new ContentResult() { Content = "<script>top.window.location.href='/user/Login'</script>" };
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top