2015-07-13 2 views
0

У меня есть приложение с несколькими модулями в одном домене. https://SomeDomain.es/Перенаправить на Логин, если не аутентифицирован?

Предположим, у меня есть модули module1 и module2, я могу получить доступ модули, как
https://SomeDomain.es/module1

https://SomeDomain.es/module2

При попытке получить доступ к выше 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) 
    { 
    } 
} 

Это тот случай, по истечении времени ожидания тоже.

+0

Можем ли мы увидеть код контроллера? – CodeNotFound

ответ

0

При использовании проверки подлинности форм я установить куки аутентификации с помощью этого метода:

FormsAuthentication.SetAuthCookie 
Смежные вопросы