Gdzie są strony logowania i rejestracji w aplikacji szkieletowej AspNet Core?

138

W VS 2017 utworzyłem nową aplikację internetową ASP.NET Core. Na drugiej stronie kreatora wybrałem aplikację internetową, a do uwierzytelnienia wybrałem „Indywidualne konta użytkowników”.

Teraz próbuję znaleźć strony powiązane z / Account / Register i / Account / Login .

_Layout.cshtml wprowadza _LoginPartial.cshtml, podobnie jak w klasycznym MVC:

<div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
        <li><a asp-page="/Index">Home</a></li>
        <li><a asp-page="/About">About</a></li>
        <li><a asp-page="/Contact">Contact</a></li>
    </ul>
    <partial name="_LoginPartial" />
</div>

Jeśli użytkownik nie jest zalogowany, _LoginPartial zawiera <a>tagi wskazujące strony logowania i rejestracji:

<ul class="nav navbar-nav navbar-right">
    <li><a asp-area="Identity" asp-page="/Account/Register">Register</a></li>
    <li><a asp-area="Identity" asp-page="/Account/Login">Login</a></li>
</ul>

To wszystko wydaje się mieć sens. Ale spodziewałbym się, że struktura folderów Obszary będzie zawierać foldery Rejestracja i Logowanie. To nie. Jedyne, co tam znajduję, to _ViewStart.cshtml

Struktura pliku obszarów

Wiem, że kod rusztowania działa. Kiedy uruchamiam projekt, łącze Zarejestruj wskazuje na „/ Identity / Account / Register”, a link Login wskazuje na „/ Identity / Account / Login”. Kliknięcie linku Zarejestruj się powoduje wyświetlenie strony rejestracji zawierającej tekst „Utwórz nowe konto”.

Ale nie mogę znaleźć tekstu „Utwórz nowe konto” w żadnym miejscu w projekcie.

Czy ktoś może mi powiedzieć, czego mi brakuje?

Bob.at.Indigo.Health
źródło

Odpowiedzi:

143

Podczas wersji zapoznawczej asp.net core 2,1 ogłoszono, że interfejs użytkownika tożsamości zostanie przeniesiony do nowej biblioteki klas Razor. https://blogs.msdn.microsoft.com/webdev/2018/03/02/aspnetcore-2-1-identity-ui/

Nadal można szkieletować Widoki tożsamości do własnego projektu, jeśli wolisz widoki lokalne: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.1 & tabs = visual-studio

Joe Audette
źródło
117
Kciuki w górę za odpowiedź i kciuki w dół za Microsoft. Jaki jest sens ukrywania kodu przed programistami i udostępnienia im podstawowego interfejsu użytkownika do uwierzytelniania? To takie zabawne. Chodź Microsoft, chcemy przyjrzeć się kodowi, nauczyć się go, złamać, naprawić i wdrożyć. To jest dziwne.
Teoman shipahi
4
czy jest jakieś polecenie PM, abyśmy mogli przenieść wszystkie pliki tożsamości do lokalnego.
panky sharma
3
@pankysharma Właśnie dodałem odpowiedź z poleceniem, aby to zrobić (na wypadek, gdyby ktoś w przyszłości tego potrzebował).
Alisson
3
Czy naprawdę musimy używać stron Razor? Czy nie ma opcji po prostu szkieletowania zwykłych widoków MVC?
zgodnie z ruchem wskazówek zegara,
Jeśli ktoś jest taki głupi jak ja ... Zajęło mi to dużo więcej czasu niż powinno, zanim zdałem sobie sprawę, że możesz wyświetlić kod Pobierz / wyślij, klikając plik prawym przyciskiem myszy i wybierając opcję „Przejdź do modelu strony”
But
59

Możesz to zrobić z poziomu programu Visual Studio, kliknij prawym przyciskiem myszy projekt i wybierz opcję Dodaj-> Nowy element szkieletowy

Nowy element rusztowania

Następnie wybierz Tożsamość i kliknij Dodaj Wybierz tożsamość

Teraz wybierz strony, które chcesz zastąpić. Rozwijana klasa kontekstu danych: a przestrzeń nazw i kontekst powinny być wstępnie wypełnione.

Wybierz Strony

Na koniec kliknij Dodaj. Jeśli masz już istniejące pliki nadpisań (np. Z szablonu), ostrzeże to o ich nadpisaniu.

John Rah
źródło
To faktycznie działa. Jednak mój kod nie skompilował się poprawnie po zaimportowaniu strony logowania - strony, którą jestem zainteresowany dostosowaniem. Rozwiązanie można znaleźć tutaj: stackoverflow.com/questions/58277172/… .
Yossi Geretz
Dziękuję za świetną odpowiedź John, Masz jakiś pomysł, dlaczego lista rozwijana klasy użytkownika (na końcu formularza) jest wyłączona?
Hamza Khanzada
1
Dzięki, udało się 👍
AhmadMM,
Z pamięci, klasa użytkownika zostaje włączona po utworzeniu klasy kontekstu danych (kliknij przycisk +)
John Rah,
14

Kliknij projekt prawym przyciskiem myszy, wybierz Add -> New Scaffold Item, w lewym panelu w oknie dialogowym wybierz Tożsamość .

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj


Możesz również wygenerować te strony za pomocą tego polecenia:

dotnet aspnet-codegenerator identity -dc WebApplication1.Data.ApplicationDbContext

Upewnij się, że zastąpiłeś własną przestrzenią nazw + nazwę DbContext. Strony są generowane tutaj:

wprowadź opis obrazu tutaj


Jeśli widzisz ten problem:

Funkcja „domyślny literał” nie jest dostępna w języku C # 7.0. Użyj wersji językowej 7.1 lub nowszej.

Możesz to naprawić, dodając to do siebie .csproji przebudowując:

<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.2.0-beta3-final" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.2.0-beta3-final" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.2.0-beta3-final" />
Alissona
źródło
BŁĄD: dotnet: tworzenie szkieletu nie powiodło się. Nie można znaleźć pliku projektu w folderze
Diego Venâncio
@ DiegoVenâncio. Czy zastąpiłeś WebApplication1.Data.ApplicationDbContextwłaściwą przestrzeń nazw i nazwę pliku?
Alisson
2
Oczywiście, pracuj po usunięciu ostatniej linii: <PackageReference Include = "Microsoft.CodeAnalysis.CSharp.Workspaces" Version = "3.2.0-beta3-final" />
Diego Venâncio
1
Można również zrobić to za pomocą programu Visual Studio Solution Explorer stackoverflow.com/a/54995794/2073738
garnitur Boy Apps
1
@DaImTo nie powinno być żadnych łączników między dotnet i aspnet. Tak powinno być dotnet aspnet-codegenerator. Może to jest problem?
Alisson
6

„Jeśli chcesz, aby cały kod identyfikacyjny znajdował się w Twojej aplikacji, aby móc go zmienić w dowolny sposób, możesz użyć nowego szkieletu tożsamości, aby dodać kod tożsamości do swojej aplikacji. Cały kod identyfikacyjny szkieletu jest generowany w folderze obszaru specyficznego dla tożsamości, dzięki czemu pozostaje ładnie oddzielony od kodu aplikacji ”.

https://blogs.msdn.microsoft.com/webdev/2018/02/02/asp-net-core-2-1-roadmap/#identity

Dla mnie działa całkiem przyjemnie i łatwo.

GioLopera
źródło
1
jak zmienić, aby wyświetlić lub edytować kod identyfikacyjny na hoście lokalnym
panky sharma
Użyłem tego dzisiaj w istniejącym projekcie, w którym zaktualizowałem do wersji 2.2, z istniejącym DbContext i zadziałało świetnie, gdy powiedziałem mojemu istniejącemu kontekstowi, że dziedziczy on po tożsamości!
jamheadart
1

Trochę spóźniłem się na imprezę, ale po frustracji związanej z interfejsem tożsamości zrezygnowałem. Twórz projekty bez tego. Moja rada jest taka (w przypadku używania wersji 2.1 lub 2.2) stwórz własne konto / zarządzaj kontrolerami i stronami MVC. Konieczne będzie debugowanie pliku startup.cs. Wyłącz także opcję kompilacji widoku publikowania (tj. Views.dll). Może nie mam ustawionej opcji, ale kompilator całkowicie ignoruje wszelkie zmiany w blokach skryptów na poziomie strony.

Will Hunt
źródło