Dove sono le pagine di accesso e registrazione in un'app con scaffolding di AspNet Core?


139

In VS 2017, ho creato una nuova applicazione Web ASP.NET Core. Nella seconda pagina della procedura guidata, ho scelto Applicazione Web e per l'autenticazione ho scelto "Account utente individuali".

Ora sto cercando di trovare le pagine associate a / Account / Register e / Account / Login .

_Layout.cshtml introduce _LoginPartial.cshtml, proprio come nel classico 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>

Se l'utente non ha <a>effettuato l'accesso, _LoginPartial include tag che puntano alle pagine di accesso e di registrazione:

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

Tutto sembra avere un senso. Ma mi sarei aspettato che la struttura della cartella Aree includesse le cartelle Registro e Accesso. Non è così. L'unica cosa che trovo lì è _ViewStart.cshtml

Struttura dei file delle aree

So che il codice impalcato funziona. Quando eseguo il progetto, il link Register punta a "/ Identity / Account / Register" e il link Login punta a "/ Identity / Account / Login". Facendo clic sul collegamento Registrati viene visualizzata una pagina di registrazione che include il testo "Crea un nuovo account".

Ma non riesco a trovare il testo "Crea un nuovo account" da nessuna parte nel progetto.

Qualcuno può dirmi cosa mi sto perdendo?

Risposte:


143

Durante l'anteprima di asp.net core 2.1 è stato annunciato che l'interfaccia utente di identità sarebbe stata spostata in una nuova libreria di classi Razor. https://blogs.msdn.microsoft.com/webdev/2018/03/02/aspnetcore-2-1-identity-ui/

È ancora possibile impalcare le viste identità nel proprio progetto se si preferiscono le viste locali: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.1 & tabs = visual-studio


117
Complimenti per la risposta e pollice giù per Microsoft. Qual è lo scopo di nascondere il codice agli sviluppatori e fornire loro un'interfaccia utente di base da utilizzare per Auth? È così divertente. Andiamo Microsoft, vogliamo esaminare il codice, impararlo, romperlo, aggiustarlo e distribuirlo. Questo è strano.
Teoman shipahi

4
c'è qualche comando PM in modo da poter portare tutti i file di identità in locale.
panky sharma

3
@pankysharma Ho appena aggiunto una risposta con un comando per farlo (nel caso qualcuno in futuro ne avesse bisogno).
Alisson

3
Dobbiamo seriamente usare le pagine Razor? Non è possibile eseguire semplicemente lo scaffolding delle normali visualizzazioni MVC?
senso

Se qualcun altro è stupido come me ... Mi ci è voluto molto più tempo del dovuto per rendermi conto che puoi visualizzare il codice Get / Post facendo clic con il pulsante destro del mouse sul file e selezionando "Vai a modello di pagina"
Scarpa

59

Puoi farlo da Visual Studio, fai clic con il pulsante destro del mouse sul tuo progetto e seleziona Aggiungi-> Nuovo elemento con impalcatura

Nuovo elemento con impalcatura

Quindi selezionare Identità e fare clic su Aggiungi Seleziona Identità

Ora seleziona le pagine che vuoi sovrascrivere. Cadere in picchiata Data Context Class: e il tuo spazio dei nomi e contesto dovrebbero essere precompilati per te.

Seleziona Pages

Infine fare clic su Aggiungi. Se sono già presenti file di sovrascrittura lì (cioè dal modello), questo avvertirà di sovrascriverli.


Questo in effetti funziona. Tuttavia, il mio codice non viene compilato in modo pulito dopo aver importato la pagina di accesso, la pagina che mi interessa personalizzare. La soluzione può essere trovata qui: stackoverflow.com/questions/58277172/… .
Yossi Geretz

Grazie per l'ottima risposta John, Hai idea del perché il menu a discesa della classe utente (alla fine del modulo) sia disabilitato?
Hamza Khanzada

1
Grazie per aver fatto il lavoro 👍
AhmadMM

Dalla memoria, la classe utente viene abilitata dopo aver creato una classe contesto dati (fare clic sul pulsante +)
John Rah

14

Fare clic con il pulsante destro del mouse sul progetto, selezionare Add -> New Scaffold Item, nella finestra di dialogo selezionare Identità nel riquadro di sinistra.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Puoi anche generare queste pagine usando questo comando:

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

Assicurati di sostituire con il tuo spazio dei nomi + nome DbContext. Le pagine vengono generate qui:

inserisci qui la descrizione dell'immagine


Se vedi questo problema:

La funzionalità "valore letterale predefinito" non è disponibile in C # 7.0. Utilizzare la versione della lingua 7.1 o successiva.

Potresti essere in grado di risolverlo aggiungendolo a te .csproje ricostruendolo:

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

ERRORE: dotnet: impalcatura non riuscita. Impossibile trovare il file di progetto nella cartella
Diego Venâncio

@ DiegoVenâncio hai sostituito WebApplication1.Data.ApplicationDbContextcon lo spazio dei nomi e il nome del file corretti?
Alisson

2
Naturalmente, lavora dopo aver rimosso quest'ultima riga: <PackageReference Include = "Microsoft.CodeAnalysis.CSharp.Workspaces" Version = "3.2.0-beta3-final" />
Diego Venâncio

1
Puoi anche farlo tramite Visual Studio Solution Explorer stackoverflow.com/a/54995794/2073738
Suit Boy Apps

1
@DaImTo non dovrebbero esserci trattini tra dotnet e aspnet. Dovrebbe essere dotnet aspnet-codegenerator. Forse questo è il problema?
Alisson

6

'Se desideri che tutto il codice di identità sia nella tua applicazione in modo da poterlo modificare come preferisci, puoi utilizzare il nuovo scaffolder di identità per aggiungere il codice di identità alla tua applicazione. Tutto il codice di identità con scaffolding viene generato in una cartella di area specifica dell'identità in modo che rimanga ben separato dal codice dell'applicazione. "

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

Funziona abbastanza bene e facilmente per me.


1
come cambiare per visualizzare o modificare il codice di identità su localhost
panky sharma

L'ho usato oggi in un progetto esistente in cui ho aggiornato alla 2.2, con DbContext esistente e ha funzionato alla grande dopo aver detto al mio contesto esistente che stava ereditando da Identity!
jamheadart

1

Un po 'tardi per la festa, ma dopo le frustrazioni con l'interfaccia utente di Identity ho rinunciato. Crea i tuoi progetti senza di essa. Il mio consiglio è (quando si usa 2.1 o 2.2) creare il proprio account / gestire i controller e le pagine mvc. Saranno necessari alcuni debug di startup.cs. Disabilitare anche l'opzione di compilazione della visualizzazione di pubblicazione (es. Views.dll). Forse non ho un'opzione impostata ma il compilatore ignora completamente qualsiasi modifica nei blocchi di script a livello di pagina.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.