У меня есть приложение с несколькими модулями в одном домене. https://SomeDomain.es/Перенаправить на Логин, если не аутентифицирован?
Предположим, у меня есть модули module1 и module2, я могу получить доступ модули, как
https://SomeDomain.es/module1
При попытке получить доступ к выше URL перенаправляет меня на страницу входа в систему, если не authenticated.Where, как Если я попытаюсь получить доступ к страницам внутри модуля1, то он не перенаправляется на страницу входа. Скорее, он пытается ответить на запрос, инициализируя контроллер. Контроллер имеет конструктор, который требует ICustomPrincipal в качестве параметра и вводится с использованием Unity IOC. Это не удается при разрешении ICustomPrincipal, поскольку Identity имеет значение null.
https://SomeDomain.es/module1 (перенаправляет войти)
https://SomeDomain.es/module1/Profile/2 (не перенаправляет для входа)
Web.Config:
<authentication mode="Forms">
<forms name=".SomeLoginCookie" loginUrl="~/Account/Login" timeout="2880" protection="All" enableCrossAppRedirects="true" />
</authentication>
Я использую пользовательский авторизовать атрибут, который отмечен на контроллере
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public ICustomPrincipal customPrincipal;
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool authorize = false;
authorize = base.AuthorizeCore(httpContext);
if(!authorize)
return false;
if(!httpContext.Request.IsAuthenticated)
return false;
if(customPrincipal== null)
{
var factory = new PrincipalFactory(httpContext.User);
customPrincipal= factory.CreatePrincipal();
}
if(customPrincipal.HasPermissions(function))
authorize = true;
else
authorize = false;
return authorize;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if(filterContext.HttpContext.Request != null && filterContext.HttpContext.Request.IsAuthenticated)
{
filterContext.Result = new ViewResult() { ViewName = "AccessDenied" };
//new HttpStatusCodeResult(403);
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
Я испытал с использованием [Авторизовать] атрибут вместо пользовательского, но без успеха.
Я не уверен, в чем проблема. Пожалуйста, поделитесь своими мыслями.
Контроллер:
[NoCache]
[CustomAuthorize(CustomFunction.Profile)]
public partial class ProfileController : Controller
{
public ICustomPrincipal Principal {get; set;}
public ProfileController(ICustomPrincipal principal)
{
Principal = principal;
}
public ActionResult Index(int Id)
{
}
}
Это тот случай, по истечении времени ожидания тоже.
Можем ли мы увидеть код контроллера? – CodeNotFound