2017-02-08 20 views
9

Tôi đang cố gắng để chuyển hướng đến một url đăng nhập khác trong ASP.NET MVC6ASP.NET lõi, thay đổi mặc định chuyển hướng cho phép

tài khoản phương pháp điều khiển đăng nhập của tôi có một thuộc tính Route để thay đổi url.

[HttpGet] 
[AllowAnonymous] 
[Route("login")] 
public IActionResult Login(string returnUrl = null) 
{ 
    this.ViewData["ReturnUrl"] = returnUrl; 
    return this.View(); 
} 

Khi cố gắng để truy cập vào một trang unathorized, tôi đang chuyển hướng đến url không hợp lệ, cần chỉ là /login nhưng thay vào đó tôi nhận được http://localhost/Account/Login?ReturnUrl=%2Fhome%2Findex

Tôi đã cấu hình xác thực Cookie đường dẫn như sau:

services.Configure<CookieAuthenticationOptions>(opt => 
{ 
    opt.LoginPath = new PathString("/login"); 
}); 

Tôi hav e đã thêm bộ lọc mặc định, để đảm bảo rằng tất cả các url yêu cầu xác thực theo mặc định.

services.AddMvc(
    options => 
    { 
     options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build())); 
    }); 

Tôi đã kiểm tra rằng url /login nào trong thực tế nạp trang đăng nhập, trong khi /account/login không, như mong đợi.

chỉnh sửa: tôi đã để lại các tuyến đường như là, (ngoài việc thay đổi bộ điều khiển mặc định và hành động)

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "default", 
     template: "{controller=Site}/{action=Site}/{id?}"); 
}); 
+0

Bạn có thể hiển thị cấu hình tuyến đường của mình trong 'Cấu hình()' không? – juunas

+0

@juunas: Tôi đã thêm các tuyến đường vào câu hỏi – Jim

+0

bạn đang sử dụng danh tính lõi-asp.net? – tmg

Trả lời

6

Nếu bạn kiểm tra UseIdentity phương pháp khuyến nông here bạn sẽ thấy rằng nó được sử dụng IdentityOptions không CookieAuthenticationOptions , vì vậy thay vào đó bạn phải cấu hình IdentityOptions:

services.Configure<IdentityOptions>(opt => 
{ 
    opt.Cookies.ApplicationCookie.LoginPath = new PathString("/login"); 
}); 

Sửa

Đối với lõi asp.net 2.0: Tùy chọn cookie nhận dạng không còn là một phần của IdentityOptions nữa. Kiểm tra số answer của mxmissile.

+1

Tôi tìm thấy nó ở đây quá https://github.com/aspnet/Identity/issues/539, cảm ơn, hoạt động tốt. – Jim

10

Với asp.net core 2.0 ra ngay bây giờ, điều này đã thay đổi để:

services.ConfigureApplicationCookie(options => options.LoginPath = "/Account/LogIn"); 

Thông tin thêm về migrating to 2.0 here.

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