2016-10-24 15 views
5

W poprzedniej ASP.NET MVC istniała opcja przekierowania do akcji logowania, jeśli użytkownik nie był uwierzytelniony.Przekierowanie do logowania, gdy nieautoryzowane w środowisku ASP.NET Core

muszę to samo z ASP.NET Core więc:

  1. stworzył projekt ASP.NET rdzenia z szablonu Visual Studio
  2. dodany [Authorize] do jakiegoś arbitralnego działania
  3. otwierany odpowiedni widok w mojej przeglądarce

Nie oczekuję przekierowania, ponieważ go nie skonfigurowałem. ALE automatycznie przekierowuje do akcji logowania!

Gdzie/jak ustawiono tę opcję?

+1

Ramy są w stanie znaleźć akcję logowania, ponieważ używa ona konwencji przez konfigurację. – sudheeshix

+0

@sudheeshix Jeśli to nie jest udokumentowane nigdzie, to jest to forma magii. Właściwie, nawet jeśli jest to udokumentowane. W dzisiejszych czasach dzieje się to za dużo, szczególnie w ASP.NET. – grokky

Odpowiedz

2

Możesz skonfigurować ścieżkę przy użyciu klasy CookieAuthenticationOptions.

Coś takiego.

app.UseCookieAuthentication(new CookieAuthenticationOptions { 
     LoginPath = new PathString("/Login/"), 
     AuthenticationType = "My-Magical-Authentication", 
     // etc... 
     }, 
}); 
+0

Widziałem, że [w tym artykule] (https://docs.asp.net/en/latest/security/authentication/cookie.html), ale to mówi "Korzystanie z Cookie Middleware ** bez ** ASP.NET Core Identity ". Używam Tożsamości. – grokky

+1

Ponadto, nie tylko chcę kontrolować to ustawienie, chcę zrozumieć, gdzie/jak to się dzieje. Nie rozumiem, jak wie, aby znaleźć mój widok logowania. Właśnie to chcę zrozumieć. – grokky

+1

Proszę zajrzeć do tego kodu - https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authentication.Cookies/CookieAuthenticationHandler.cs#L379 – Anuraj

2

Dla każdego, kto jest zainteresowany, można to zrobić również u dostawcy usług AddIdentity.

services.AddIdentity<User, IdentityRole>(options => 
    { 
     options.Cookies.ApplicationCookie.AutomaticAuthenticate = true; 
     options.Cookies.ApplicationCookie.AutomaticChallenge = true; 
     options.Cookies.ApplicationCookie.LoginPath = "/Auth/Login"; 
    }) 
    .AddEntityFrameworkStores<MehandiContext>() 
    .AddDefaultTokenProviders(); 

I jak wyjaśniono tutaj: https://stackoverflow.com/a/41643105/5784635

próbowałem to w kwietniu 2017 roku i "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.1.0" nie przekierować musiałem użyć 1.0.1 wersję

+0

Działa dobrze dla mnie w wersji 1.1.0 (lipiec 2017) – Wouter

+0

Anton/@Wouter, czy korzystacie z .NETCore? –

+0

Korzystanie z .net core 1.1 – Wouter

1

W wersji podstawowej prądu ASPNET (2.1.0), to się zmieniło, teraz stosowanie może używać rozszerzeń:

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

lub

services 
     .AddAuthentication() 
     .AddCookie(options => 
     { 
      options.LoginPath = "/login"; 
      options.LogoutPath = "/logout"; 
     }); 

Możesz zobaczyć więcej na temat migracji do wersji 2.0 in this article.

Powiązane problemy