Witam, próbuje zaimplementować funkcjonalność która będzie przekierowywać nieautoryzowanym użytkowników do odpowiednich formularzy. Korzystam z werscji MVC 5, gdzie zaimplementowane mam Identity 2.0 z Owinem( i tutaj może znajdować się przyczyna problemu). W praktycy wygląda to tak. Posiadam AdminController i AccountController chciałbym, aby nieautoryzowanie żądanie z AdminController było przekierowywane do akcji Login w tym właśnie kontrolerze(Admin), natomiast w przypadku AccountController, przekierowywane do akcji Login w AccountController.
Stworzyłem własną klasę autoryzującą: Atrybut ten dodałem w FilterConfig.
public class AdminAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
var ctx = filterContext.HttpContext.GetOwinContext();
if (!ctx.Request.User.Identity.IsAuthenticated)
{
//ctx.Authentication.SignOut();
var controler = (string)filterContext.RouteData.Values["controller"];
var url = filterContext.HttpContext.Request.FilePath;
if (controler.Equals("Admin"))
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new {controller = "Admin", action = "Login"}));
}
else
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new {controller = "Account", action = "Login"}));
// HttpContext.Current.ClearError();
}
}
else
{
base.OnAuthorization(filterContext);
}
}
}
Co do działania aplikacji. Nie dostaje żadnego eksepszyna, tylko program zapętla się w tej właśnie metodzie OnAuthorization i dostaje komunikat w przeglądarce typu "Nieprawidłowe przekierowanie". Podejrzewam, że przyczyną może być Owin ktory znajduje się w Startup i przesyła do określonego formularza. Jednak komentując ten linie nadal występuje ten problem..
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
//CookieSecure = CookieSecureOption.Always
});
app.CreatePerOwinContext(ProjectDDDContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
//app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
}
Jakieś pomysły?