2017-01-11 15 views
5

Tôi đang phát triển một ứng dụng web MVC5. Ứng dụng này có 2 khu vực, 'SU' và '' Ứng dụng '. Mỗi khu vực phải được xác thực độc lập. Mỗi khu vực cũng có các trang đăng nhập riêng của họ.
Tôi đang sử dụng OWIN để xác thực người dùng.
Bây giờ vấn đề là, tôi không thể đặt số tiền CookieAuthenticationOptionsLoginPath dựa trên khu vực người dùng đang yêu cầu.
Ví dụ, nếu người dùng yêu cầu http://example.com/su/reports/dashboard, tôi sẽ có thể chuyển hướng họ đến http://example.com/su/auth/login
Tương tự như vậy, đối với khu vực 'App', nếu người dùng yêu cầu http://example.com/app/history/dashboard, tôi sẽ có thể chuyển hướng họ đến http://example.com/app/auth/loginXác thực dựa trên khu vực bằng cách sử dụng OWIN

Tôi muốn để tránh Tuỳ chỉnh thuộc tính và do đó cố gắng sau mã nhưng nó luôn luôn chuyển hướng đến con đường đăng nhập root tức, http://example.com/auth/login

public partial class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      var url = HttpContext.Current.Request.Url.AbsoluteUri; 
      string loginPath = "/auth/login"; 
      string areaName = string.Empty; 
      if (url.ToLower().Contains("/su/")) 
      { 
       areaName = "SU"; 
       loginPath = "/su/auth/login"; 
      } 
      if (url.ToLower().Contains("/app/")) 
      { 
       areaName = "APP"; 
       loginPath = "/app/auth/login"; 
      } 
      app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = "ApplicationCookie" + areaName, 
       LoginPath = new PathString(loginPath) 
      }); 
     } 
} 

tôi sau cách tiếp cận đúng hay là có cách nào khác để đạt được giống nhau không? Cảm ơn!

Trả lời

2

CookieAuthenticationOptions.LoginPath thuộc tính được đặt một lần khi khởi động. Để sử dụng URL khác nhau dựa trên yêu cầu, bạn có thể sử dụng triển khai tùy chỉnh ICookieAuthenticationProvider được đặt qua CookieAuthenticationOptions.Provider hoặc chỉ đặt hành động tùy chỉnh của mình cho OnApplyRedirect trong tích hợp CookieAuthenticationProvider. Tùy chọn thứ hai đơn giản hơn và có vẻ đủ cho trường hợp của bạn.

Đây là mã mẫu:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = "ApplicationCookie", 
    LoginPath = new PathString("/auth/login"), 
    Provider = new CookieAuthenticationProvider { OnApplyRedirect = OnApplyRedirect } 
}); 

public static void OnApplyRedirect(CookieApplyRedirectContext context) 
{ 
    var url = HttpContext.Current.Request.Url.AbsoluteUri; 

    string redirectUrl = "/auth/login"; 
    if (url.ToLower().Contains("/su/")) 
    { 
     redirectUrl = "/su/auth/login"; 
    } 
    else if (url.ToLower().Contains("/app/")) 
    { 
     redirectUrl = "/app/auth/login"; 
    } 

    context.Response.Redirect(redirectUrl); 
} 
Các vấn đề liên quan