10

Setup (sử dụng MVC 4)ASP.net MVC lọc Authorize toàn cầu buộc đăng nhập vào một hành động AllowAnonymous

public class MyAuthorizeAttribute : AuthorizeAttribute { 

    protected override bool AuthorizeCore(HttpContextBase httpContext) { 

     var isAuthorised = base.AuthorizeCore(httpContext); 

     if(isAuthorised) { 
      // retrieve authentication ticket from cookie and 
      // create custome principal and attach to 
      // httpContext.User 
     } 

     return isAuthorised; 
    } 
} 

Gloabl.asax.cs:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new MyAuthorizeAttribute()); 
} 

HomeController.cs:

using System.Web.Mvc; 

public class HomeController : Controller 
{ 
    [AllowAnonymous] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

Sự cố

Cuộc gọi đến trang chủ bắt buộc tải trang đăng nhập.

Câu hỏi

Khi HomeController.Index() hành động được trang trí với [AllowAnonymous], tại sao ASP chuyển hướng tôi đến xem đăng nhập?

Tôi đang sử dụng this bài viết để tham khảo

+0

Tôi vừa kiểm tra với Ủy quyền tích hợp và nó hoạt động tốt cho tôi. Có thể bạn phải kiểm tra mã ủy quyền tùy chỉnh của mình. – VJAI

+0

Tôi đã thử với thuộc tính Authorize tích hợp, thay thế thuộc tính đang được thêm vào bộ lọc chung trong global.asax của tôi nhưng tôi vẫn đang được chuyển hướng đến trang đăng nhập khi gọi hành động chỉ mục trên bộ điều khiển nhà. Tui bỏ lỡ điều gì vậy? Một số thiết lập trong cấu hình web của tôi? Tôi không có nhà cung cấp dịch vụ thành viên, nhà cung cấp vai trò hoặc nhà cung cấp hồ sơ nào được định cấu hình. Tôi có nên? –

+0

Cài đặt xác thực biểu mẫu trong web.config là cài đặt chuyển hướng đến trang đăng nhập. Nhưng bạn không cần phải cài đặt bổ sung. Tôi đã thử bằng cách tạo ra một mẫu ứng dụng MVC 4/Internet mới đánh dấu bộ điều khiển Home với hành động Authorize và Index với AllowAnonymous và nó hoạt động như mong đợi. – VJAI

Trả lời

-1

Mặc dù đây không phải là một câu trả lời nhưng ..

Hãy thử với built-in Authorize mã và đảm bảo AllowAnonymous đang làm việc tốt. Tôi nhìn thấy trong tùy chỉnh của bạn cho phép bình luận bạn đang cố gắng

lấy vé xác thực từ cookie và tạo custome gốc và gắn vào httpContext.User

tôi sẽ đề nghị bạn làm quá trình đó rất sớm trong Application_AuthenticateRequest của Global.asax.cs như được chỉ định trong thread này.

+0

theo nhận xét của tôi ở trên, tôi đã thử sử dụng AuthorizeAttribute nhưng vẫn chuyển hướng để đăng nhập. Đưa cái gì? –

11

Theo nhận xét của tôi về câu hỏi gốc. Vấn đề là xem chỉ mục đã gọi hành động trên các bộ điều khiển khác trả lại một phần lượt xem. Chỉ là một trường hợp trải qua mọi thứ và tước bỏ thuộc tính [Authorize] cũ.

+4

Nếu điều này giải quyết được vấn đề, hãy đánh dấu nó là câu trả lời. Bạn có thể trả lời câu hỏi của riêng bạn. –

+0

Tìm thấy tuyệt vời! Tôi đã đập đầu vào tường trên cái này! Không thể tìm ra lý do tại sao tôi sẽ "đăng xuất" và trở về trang chủ của tôi sẽ tự động đưa tôi qua lại quá trình đăng nhập. Cảm ơn bạn! – Airn5475

2

Tôi có vấn đề tương tự và cuối cùng tôi đã sử dụng sai lớp AllowAnonymousAttribute. Có hai lớp AllowAnonymousAttribute:

Trong trường hợp của bạn, bạn phải sử dụng tất nhiên một trong những từ System.Web.Mvc :)

tôi đã dành nhiều hơn một giờ để tìm ra trong chương trình của tôi

5

Mặc dù poster gốc đã tìm ra nguyên nhân trong trường hợp của anh ta, tôi muốn chia sẻ độ phân giải của mình, khi tôi gặp phải câu hỏi này khi đối mặt với các triệu chứng tương tự.

Trong web của tôi.tập tin cấu hình tôi đã có, tuân theo logic của webforms:

<authorization> 
    <deny users="?" /> 
</authorization> 

Bạn không phải có điều này, vì nó sẽ ngăn yêu cầu thực hiện bất kỳ hành động mà không cần đăng nhập đầu tiên, ngoại trừ cho action login mà chuyển hướng diễn ra . Tôi chỉ phát hiện ra điều này khi tôi cố gắng thêm một hành động công khai thứ hai.

+0

Tôi cũng làm như vậy. Được phát hiện khi thêm một hành động công khai khác. – Mitul

+0

Cảm ơn bạn đã thêm điều này, đã giúp tôi, bốn năm sau khi đăng! –

Các vấn đề liên quan