ASP.NET MVC - CustomeAuthorize Filteraktion mithilfe einer externen website für den Login in den Benutzer -
Ich habe eine CustomeAuthorize action filter, der leitet den Benutzer zu signin Seite, wenn der Benutzer nicht authentifiziert wurde. Ich habe diesen filter anwenden, um Aktionen oder Controller.
[CustumeAuthorize]
public ActionResult MyAction()
{
//do something here
return View();
}
und der filter sieht wie folgt aus:
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);
}
}
}
Sobald ich einen Wert zuweisen filterContext.Ergebnis nach der Ausführung des filters abgeschlossen, die Ausführung ist (irgendwie?!) Weiterleitung der SignIn-Aktion und MyAction nicht ausführen. Das ist genau das, was ich will.
Nun sagen, ich will meine CustomAuthorize um den Benutzer zu authentifizieren gegen eine externe Webseite und nicht meine eigenen SignIn Aktion, so bin ich etwas wie dieses:
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);
}
}
}
Mein problem ist, dass nach der Ausführung der zweiten version von CustomAuthorize filter abgeschlossen ist, wird die Ausführung fortgesetzt, um MyAction das ist nicht das, was ich will!!! Wie verhindere ich die Ausführung von MyAction nach filter in diesem Fall?
-Update- ich kam gerade über eine neue Ausgabe. Mein MVC-Anwendung in einem iFrame und ich möchten, dass die Umleitung zu zwingen, den aktuellen frame als Haupt-frame-Umleitung, so bin ich etwas wie:
string url = "http://externalSite.com/login?returnUrl=" + filterContext.HttpContext.Request.RawUrl;
filterContext.HttpContext.Response.Write("<script type=\"text/javascript\">\ntop.location.href = \"" + url + "\";</script>");
Ist es ein Weg, um pass ein javascript, um RedirectResult()?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die RedirectResult ähnlich wie die, die Sie wurden mit Hilfe der RedirectToRouteResult, bevor Sie zu ersetzen, die dem Ergebnis in der filter-Kontext.
Lassen Sie mich sehen, wenn ich verstehe, - Sie habe ein iFrame, und die Ausführung einer Aktion innerhalb dieses iFrame. Möchten Sie umleiten zu einer übergeordneten Seite, nicht in das iFrame?
Wenn ja, nur per Redirect(url) in Ihrem handeln.
Können Sie ein Urteil von jQuery auf der login-Seite.
ODER
Bearbeiten 'filterContext.Ergebnis' in Aktion 'OnActionExecuting'