Où sont les pages de connexion et d'enregistrement dans une application échafaudée AspNet Core?

139

Dans VS 2017, j'ai créé une nouvelle application Web ASP.NET Core. Sur la deuxième page de l'assistant, j'ai choisi Application Web, et pour l'authentification, j'ai choisi "Comptes d'utilisateurs individuels".

Maintenant, j'essaie de trouver les pages associées à / Compte / Inscription et / Compte / Connexion .

_Layout.cshtml apporte _LoginPartial.cshtml, tout comme il l'a fait dans MVC classique:

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

Si l'utilisateur n'est pas connecté, _LoginPartial inclut des <a>balises qui pointent vers les pages de connexion et d'enregistrement:

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

Tout cela semble logique. Mais je me serais attendu à ce que la structure du dossier Areas inclue les dossiers Register et Login. Ce ne est pas. La seule chose que je trouve là-bas est _ViewStart.cshtml

Structure du fichier des zones

Je sais que le code échafaudé fonctionne. Lorsque je lance le projet, le lien Register pointe vers "/ Identity / Account / Register" et le lien Login pointe vers "/ Identity / Account / Login". En cliquant sur le lien S'inscrire, j'obtiens une page d'inscription qui comprend le texte «Créer un nouveau compte».

Mais je ne trouve le texte "Créer un nouveau compte" nulle part dans le projet.

Quelqu'un peut-il me dire ce que je manque?

Bob.at.Indigo.Health
la source

Réponses:

143

Il a été annoncé lors de l'aperçu de asp.net core 2.1 que l'interface utilisateur d'identité serait déplacée vers une nouvelle bibliothèque de classes Razor. https://blogs.msdn.microsoft.com/webdev/2018/03/02/aspnetcore-2-1-identity-ui/

Il est toujours possible de scaffold les vues d'identité dans votre propre projet si vous préférez les vues locales: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.1 & tabs = visual-studio

Joe Audette
la source
117
Bravo pour la réponse et bravo pour Microsoft. Quel est l'intérêt de cacher le code aux développeurs et de leur donner une interface utilisateur de base à utiliser pour Auth? C'est trop drôle. Allez Microsoft, nous voulons examiner le code, l'apprendre, le casser, le réparer et le déployer. C'est étrange.
Teoman shipahi
4
y a-t-il une commande PM afin que nous puissions obtenir tous les fichiers d'identité en local.
panky sharma
3
@pankysharma Je viens d'ajouter une réponse avec une commande pour le faire (au cas où quelqu'un en aurait besoin dans le futur).
Alisson
3
Devons-nous sérieusement utiliser les pages Razor? N'existe-t-il pas d'option pour simplement échafauder des vues MVC régulières?
dans le sens des aiguilles d'une
Si quelqu'un d'autre est stupide comme moi ... Il m'a fallu beaucoup plus de temps que prévu pour réaliser que vous pouvez afficher le code Get / Post en cliquant avec le bouton droit sur le fichier et en sélectionnant "Aller au modèle de page"
Chaussure
59

Vous pouvez le faire à partir de Visual Studio, cliquez avec le bouton droit sur votre projet et sélectionnez Ajouter-> Nouvel élément scaffolded

Nouvel élément échafaudé

Puis sélectionnez Identité et cliquez sur Ajouter Sélectionnez l'identité

Sélectionnez maintenant les pages que vous souhaitez remplacer. Classe de contexte de données déroulante : et votre espace de nom et votre contexte doivent être pré-remplis pour vous.

Sélectionner des pages

Cliquez enfin sur Ajouter. Si vous avez déjà des fichiers de remplacement existants (c'est-à-dire à partir du modèle), cela vous avertira de les écraser.

John Rah
la source
Cela fonctionne en fait. Cependant, mon code ne se compilerait pas proprement après avoir importé la page de connexion - la page que je souhaite personnaliser. La solution peut être trouvée ici: stackoverflow.com/questions/58277172/… .
Yossi Geretz
Merci pour la bonne réponse John, Avez-vous une idée de la raison pour laquelle le menu déroulant des classes d'utilisateurs (à la fin du formulaire) est désactivé?
Hamza Khanzada
1
Merci d'avoir fait le travail 👍
AhmadMM
De mémoire, la classe d'utilisateurs devient activée une fois que vous créez une classe de contexte de données (cliquez sur le bouton +)
John Rah
14

Cliquez avec le bouton droit sur le projet, sélectionnez Add -> New Scaffold Item, dans la boîte de dialogue sélectionnez Identité dans le volet gauche.

entrez la description de l'image ici

entrez la description de l'image ici


Vous pouvez également générer ces pages à l'aide de cette commande:

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

Assurez-vous de remplacer par votre propre espace de noms + nom DbContext. Les pages sont générées ici:

entrez la description de l'image ici


Si vous voyez ce problème:

La fonctionnalité «littéral par défaut» n'est pas disponible dans C # 7.0. Veuillez utiliser la version 7.1 ou supérieure.

Vous pourrez peut-être le réparer en vous ajoutant ceci .csprojet en le reconstruisant:

<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
la source
ERREUR: dotnet: l'échafaudage a échoué. Impossible de trouver le fichier de projet dans le dossier
Diego Venâncio
@ DiegoVenâncio avez-vous remplacé WebApplication1.Data.ApplicationDbContextpar l'espace de noms et le nom de fichier corrects?
Alisson
2
Bien sûr, travaillez après avoir supprimé cette dernière ligne: <PackageReference Include = "Microsoft.CodeAnalysis.CSharp.Workspaces" Version = "3.2.0-beta3-final" />
Diego Venâncio
1
Vous pouvez également le faire via Visual Studio Solution Explorer stackoverflow.com/a/54995794/2073738
Suit Boy Apps
1
@DaImTo il ne devrait y avoir aucun trait d'union entre dotnet et aspnet. Ça devrait être dotnet aspnet-codegenerator. C'est peut-être le problème?
Alisson le
6

«Si vous souhaitez que tout le code d'identité se trouve dans votre application afin de pouvoir le modifier comme vous le souhaitez, vous pouvez utiliser le nouvel échafaudage d'identité pour ajouter le code d'identité à votre application. Tout le code d'identité échafaudé est généré dans un dossier de zone spécifique à l'identité afin qu'il reste bien séparé du code de votre application.

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

Cela fonctionne assez bien et facilement pour moi.

GioLopera
la source
1
comment changer pour afficher ou modifier le code d'identité sur localhost
panky sharma
Je l'ai utilisé aujourd'hui dans un projet existant dans lequel j'ai mis à jour vers la version 2.2, avec DbContext existant et cela a fonctionné à merveille une fois que j'ai dit à mon contexte existant qu'il héritait de Identity!
jamheadart
1

Un peu tard à la fête, mais après des frustrations avec l'interface utilisateur d'identité, j'ai abandonné. Créez vos projets sans cela. Mon conseil est (lors de l'utilisation de 2.1 ou 2.2) de créer votre propre compte / gérer les contrôleurs et les pages mvc. Un certain débogage de startup.cs sera nécessaire. Désactivez également l'option de compilation de l'affichage de publication (c'est-à-dire views.dll). Peut-être que je n'ai pas de jeu d'options, mais le compilateur ignore complètement tout changement dans les blocs de script au niveau de la page.

Will Hunt
la source