Wo befinden sich die Anmelde- und Registrierungsseiten in einer AspNet Core-Gerüst-App?

137

In VS 2017 habe ich eine neue ASP.NET Core-Webanwendung erstellt. Auf der zweiten Seite des Assistenten habe ich Webanwendung und für die Authentifizierung "Individuelle Benutzerkonten" ausgewählt.

Jetzt versuche ich, die Seiten zu finden, die mit / Account / Register und / Account / Login verknüpft sind .

_Layout.cshtml bringt _LoginPartial.cshtml ein, ähnlich wie in der klassischen 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>

Wenn der Benutzer nicht angemeldet ist, enthält _LoginPartial <a>Tags, die auf die Anmelde- und Registrierungsseiten verweisen:

<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>

Das alles scheint sinnvoll zu sein. Ich hätte jedoch erwartet, dass die Ordnerstruktur "Bereiche" die Ordner "Registrieren" und "Anmelden" enthält. Es tut nicht. Das einzige, was ich dort finde, ist _ViewStart.cshtml

Bereiche Dateistruktur

Ich weiß, dass der Gerüstcode funktioniert. Wenn ich das Projekt ausführe, zeigt der Link "Registrieren" auf "/ Identität / Konto / Registrieren" und der Link "Anmelden" auf "/ Identität / Konto / Anmelden". Durch Klicken auf den Link Registrieren erhalte ich eine Registrierungsseite mit dem Text "Neues Konto erstellen".

Ich kann den Text "Neues Konto erstellen" jedoch nirgendwo im Projekt finden.

Kann mir jemand sagen, was ich vermisse?

Bob.at.Indigo.Health
quelle

Antworten:

141

Während der Vorschau von asp.net core 2.1 wurde angekündigt, dass die Identity UI in eine neue Razor Class Library verschoben wird. https://blogs.msdn.microsoft.com/webdev/2018/03/02/aspnetcore-2-1-identity-ui/

Es ist weiterhin möglich, die Identitätsansichten in Ihr eigenes Projekt zu integrieren, wenn Sie lokale Ansichten bevorzugen: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.1 & tabs = Visual-Studio

Joe Audette
quelle
115
Daumen hoch für die Antwort und Daumen runter für Microsoft. Was bringt es, Code vor Entwicklern zu verbergen und ihnen eine grundlegende Benutzeroberfläche für Auth zu geben? Das ist so witzig. Komm schon, Microsoft, wir wollen uns mit Code befassen, ihn lernen, brechen, reparieren und bereitstellen. Das ist komisch.
Teoman Shipahi
4
Gibt es einen PM-Befehl, damit wir alle Identitätsdateien auf lokal übertragen können?
Panky Sharma
3
@pankysharma Ich habe gerade eine Antwort mit einem Befehl dazu hinzugefügt (falls jemand sie in Zukunft braucht).
Alisson
3
Müssen wir ernsthaft Rasiermesserseiten verwenden? Gibt es keine Möglichkeit, normale MVC-Ansichten einfach zu erstellen?
im Uhrzeigersinn
Wenn jemand so dumm ist wie ich ... Es hat viel länger gedauert, bis mir klar wurde, dass Sie die Abruf- / Postleitzahl anzeigen können, indem Sie mit der rechten Maustaste auf die Datei klicken und "Gehe zu Seitenmodell" auswählen
Schuh
59

Sie können dies in Visual Studio tun. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie Hinzufügen-> Neues Gerüstelement

Neuer Gerüstgegenstand

Wählen Sie dann Identität und klicken Sie auf Hinzufügen Wählen Sie Identität

Wählen Sie nun die Seiten aus, die Sie überschreiben möchten. Dropdown- Datenkontextklasse: und Ihr Namespace und Kontext sollten für Sie vorab ausgefüllt sein.

Wählen Sie Seiten

Klicken Sie abschließend auf Hinzufügen. Wenn dort bereits Überschreibungsdateien vorhanden sind (z. B. aus der Vorlage), wird vor dem Überschreiben gewarnt.

John Rah
quelle
Das funktioniert tatsächlich. Mein Code wurde jedoch nicht sauber kompiliert, nachdem ich die Anmeldeseite importiert hatte - die Seite, die ich anpassen möchte. Die Lösung finden Sie hier: stackoverflow.com/questions/58277172/… .
Yossi Geretz
Vielen Dank für die großartige Antwort John. Haben Sie eine Idee, warum das Dropdown-Menü für Benutzerklassen (am Ende des Formulars) deaktiviert ist?
Hamza Khanzada
1
Danke, es hat den Job gemacht 👍
AhmadMM
Aus dem Speicher wird die Benutzerklasse aktiviert, sobald Sie eine Datenkontextklasse erstellen (klicken Sie auf die Schaltfläche +)
John Rah
14

Klicken Sie mit der rechten Maustaste auf das Projekt, wählen Sie Add -> New Scaffold Itemim Dialogfeld im linken Bereich Identität aus.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


Sie können diese Seiten auch mit diesem Befehl generieren:

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

Stellen Sie sicher, dass Sie durch Ihren eigenen Namespace + DbContext-Namen ersetzen. Die Seiten werden hier generiert:

Geben Sie hier die Bildbeschreibung ein


Wenn Sie dieses Problem sehen:

Die Funktion 'Standardliteral' ist in C # 7.0 nicht verfügbar. Bitte verwenden Sie die Sprachversion 7.1 oder höher.

Möglicherweise können Sie das Problem beheben, indem Sie es hinzufügen .csprojund neu erstellen :

<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" />
Alisson
quelle
FEHLER: dotnet: Gerüst fehlgeschlagen. Projektdatei konnte nicht im Ordner gefunden werden
Diego Venâncio
@ DiegoVenâncio haben Sie WebApplication1.Data.ApplicationDbContextdurch den richtigen Namespace und Dateinamen ersetzt?
Alisson
2
Natürlich, arbeiten Sie nach dem Entfernen dieser letzten Zeile: <PackageReference Include = "Microsoft.CodeAnalysis.CSharp.Workspaces" Version = "3.2.0-beta3-final" />
Diego Venâncio
1
Sie können dies auch über Visual Studio Solution Explorer tun. Stackoverflow.com/a/54995794/2073738
Suit Boy Apps
1
@DaImTo sollte es keine Bindestriche zwischen Dotnet und Aspnet geben. Es sollte sein dotnet aspnet-codegenerator. Vielleicht ist das das Problem?
Alisson
6

'Wenn Sie möchten, dass der gesamte Identitätscode in Ihrer Anwendung enthalten ist, damit Sie ihn nach Belieben ändern können, können Sie den neuen Identitätsgerüst verwenden, um den Identitätscode zu Ihrer Anwendung hinzuzufügen. Der gesamte Gerüstidentitätscode wird in einem identitätsspezifischen Bereichsordner generiert, damit er gut von Ihrem Anwendungscode getrennt bleibt. '

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

Es funktioniert ziemlich schön und einfach für mich.

GioLopera
quelle
1
wie man ändert, um Identitätscode auf localhost anzuzeigen oder zu bearbeiten
panky sharma
Ich habe dies heute in einem vorhandenen Projekt verwendet, in dem ich mit vorhandenem DbContext auf 2.2 aktualisiert habe, und es hat fantastisch funktioniert, als ich meinem vorhandenen Kontext mitgeteilt hatte, dass es von Identity erbt!
Jamheadart
1

Etwas spät zur Party, aber nach Frustrationen mit der Identity UI habe ich es aufgegeben. Erstellen Sie Ihre Projekte ohne. Mein Rat ist (bei Verwendung von 2.1 oder 2.2), ein eigenes Konto zu erstellen / Controller und MVC-Seiten zu verwalten. Einige debugging von startup.cs ist erforderlich. Deaktivieren Sie auch die Kompilierungsoption für die Veröffentlichungsansicht (dh views.dll). Möglicherweise habe ich keine Option festgelegt, aber der Compiler ignoriert alle Änderungen in Skriptblöcken auf Seitenebene vollständig.

Will Hunt
quelle