2010-11-15 5 views
5

Tôi có một yêu cầu khá đơn giản.Thay đổi tuyến đường mặc định của ASP.NET MVC khi đăng nhập/đăng xuất

Nếu người dùng truy cập http://www.somedomain.com/ và chưa đăng nhập, tôi muốn MVC định tuyến người dùng đến HomeController.

Nếu người dùng truy cập http://www.somedomain.com/ và đã đăng nhập, tôi muốn MVC định tuyến người dùng đến ClientController.

Có giải pháp dễ dàng cho vấn đề này không?

Cảm ơn bạn rất nhiều!

Trả lời

3

Trong HomeController của bạn, chỉ số hoạt động, chuyển hướng đến ClientController nếu HttpContext.User không là null:

public class HomeController : Controller 
{ 

    public ActionResult Index() 
    { 
     if (HttpContext.User != null) 
     { 
      RedirectToAction("Index", "Client"); 
     } 
    } 

} 

EDIT: Hoặc sử dụng Request.IsAuthenticated

public class HomeController : Controller 
{ 

    public ActionResult Index() 
    { 
     if (Request.IsAuthenticated) 
     { 
      RedirectToAction("Index", "Client"); 
     } 
    } 

} 
+0

Với URL giải pháp này được thay đổi, sẽ rất tuyệt nếu URL vẫn giữ nguyên –

+0

Tôi thứ hai yêu cầu URL không thay đổi – Phil

1

Có khá một vài cách để giải quyết vấn đề này.

Tùy thuộc vào yêu cầu của bạn, bạn có thể triển khai IAuthorizationFilter cho mục đích này và triển khai phương thức OnAuthorization như thế này.

public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     IUser user = _currentUserProvider.CurrentUser; 
     if (user != null) 
     { 
      // you can perform perform additional user-authorization here...   
      if(_authorizationService.IsAuthorized(user)) 
      { 
       //user is authorized 
       return; 
      } 
      else 
      {  
       HandleUnAuthorizedRequest(filterContext); 
       return; 
      } 
     } 

     //user is not authenticated (not logged in) 
     HandleUnAuthenticatedRequest(filterContext); 
    } 

Sau đó, bạn sử dụng actionFilter trên phương thức điều khiển hoặc lớp bộ điều khiển. Xem http://msdn.microsoft.com/en-us/library/dd410209(v=VS.90).aspx để biết thêm thông tin về Bộ lọc hành động.

Bây giờ, nếu bạn muốn tất cả các yêu cầu chưa được xác thực để truy cập vào ClientController, bạn có thể xử lý sự kiện AuthenticateRequest trong lớp HttpApplication (thường là global.asax.cs) và thực hiện điều gì đó giống như trong actionFilter ở trên.