2009-05-29 24 views
7

tengo unas los métodos siguientes en un controlador MVC, que redirigen a la página de inicio de sesión cuando un usuario no está conectado aMVC Autorización - múltiples páginas de inicio de sesión

[Authorize] 
public ActionResult Search() { 
    return View(); 
} 

[Authorize] 
public ActionResult Edit() { 
    return View(); 
} 

¿Hay una manera rápida/fácil/estándar a. redirigir la segunda acción a una página de inicio de sesión diferente a la página definida en el archivo web.config?

O tengo que hacer algo como

public ActionResult Edit() { 
    if (IsUserLoggedIn) 
    return View(); 
    else 
    return ReturnRedirect("/Login2"); 
} 

Respuesta

18

Creo que es posible mediante la creación de un filtro de autorización personalizado:

public class CustomAuthorization : AuthorizeAttribute 
{ 
    public string LoginPage { get; set; } 

    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      filterContext.HttpContext.Response.Redirect(LoginPage); 
     } 
     base.OnAuthorization(filterContext); 
    } 
} 

En su acción:

[CustomAuthorization(LoginPage="~/Home/Login1")] 
public ActionResult Search() 
{ 
    return View(); 
} 

[CustomAuthorization(LoginPage="~/Home/Login2")] 
public ActionResult Edit() 
{ 
    return View(); 
} 
+1

Buena solución. No sabía que puedes hacer esto. http://www.asp.net/LEARN/mvc/tutorial-14-cs.aspx tiene una buena introducción a la creación de acción personalizados Filtros para personas que quieren una explicación. –

+0

¿Esto rompe la verificación de roles? – Sinaesthetic

+0

Me encanta esta solución –

1

Web.config autenticación de formularios basados ​​no tiene dicha funcionalidad incorporada (esto se aplica tanto a Windows Forms y MVC). Usted tiene que manejar por sí mismo (ya sea a través de un HttpModule o ActionFilter, el método que usted ha mencionado o cualquier otro método)

Cuestiones relacionadas