2017-02-08 24 views
9

Ja próbuje przekierować do innego URL logowania w ASP.NET MVC6ASP.NET rdzeń, zmiana domyślnego przekierować za nieuprawnione

Moje konto metoda logowania kontroler posiada atrybut Route zmiany adresu URL.

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

Podczas próby uzyskania dostępu do unathorized strony, jestem przekierowywany do nieprawidłowego adresu URL, powinien on być po prostu /login ale zamiast dostać http://localhost/Account/Login?ReturnUrl=%2Fhome%2Findex

mam skonfigurowane uwierzytelnianie cookies ścieżka w następujący sposób:

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

I hav e dodano filtr domyślny, aby upewnić się, że wszystkie adresy URL wymagają domyślnie uwierzytelnienia.

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

Sprawdziłem, że adres URL /login robi w rzeczywistości załadować stronę logowania, podczas /account/login nie, jak oczekiwano.

edit: Zostawiłem trasy jak jest (oprócz zmiany domyślnego kontrolera i akcji)

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

Czy mógłbyś pokazać swoją konfigurację trasy w 'Configure()'? – juunas

+0

@juunas: Dodałem trasy do pytania – Jim

+0

czy używasz asp.net-core-identity? – tmg

Odpowiedz

6

Jeśli zaznaczysz UseIdentity metodę rozszerzenia here można zauważyć, że jest to za pomocą IdentityOptions nie CookieAuthenticationOptions , więc zamiast tego należy skonfigurować IdentityOptions:

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

Edycja

Dla asp.net core 2.0: Opcje plików cookie tożsamości nie są już częścią IdentityOptions. Sprawdź mxmissile's answer.

+1

Znalazłem go tutaj https://github.com/aspnet/Identity/issues/539, dzięki, działa dobrze. – Jim

10

Z asp.net core 2.0 teraz, to zmienił się:

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

Więcej na migrating to 2.0 here.

Powiązane problemy