¿Dónde están las páginas de inicio de sesión y registro en una aplicación con scaffolded de AspNet Core?

137

En VS 2017, creé una nueva aplicación web ASP.NET Core. En la segunda página del asistente, elegí Aplicación web, y para Autenticación elegí "Cuentas de usuario individuales".

Ahora, estoy tratando de encontrar las páginas asociadas con / Cuenta / Registrarse y / Cuenta / Iniciar sesión .

_Layout.cshtml trae _LoginPartial.cshtml, tal como lo hizo en MVC clásico:

<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 el usuario no ha iniciado sesión, _LoginPartial incluye <a>etiquetas que apuntan a las páginas de inicio de sesión y registro:

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

Todo eso parece tener sentido. Pero hubiera esperado que la estructura de carpetas de Áreas incluyera las carpetas de Registro e Inicio de sesión. No es asi. Lo único que encuentro allí es _ViewStart.cshtml

Estructura de archivo de áreas

Sé que el código andamio funciona. Cuando ejecuto el proyecto, el enlace Registrar apunta a "/ Identidad / Cuenta / Registrar" y el enlace Iniciar sesión apunta a "/ Identidad / Cuenta / Iniciar sesión". Al hacer clic en el enlace Registrarse, aparece una página de registro que incluye el texto "Crear una nueva cuenta".

Pero no puedo encontrar el texto "Crear una nueva cuenta" en ninguna parte del proyecto.

¿Alguien puede decirme lo que me falta?

Bob.at.Indigo.Health
fuente

Respuestas:

141

Se anunció durante la vista previa de asp.net core 2.1 que la interfaz de usuario de identidad se trasladaría a una nueva biblioteca Razor Class. https://blogs.msdn.microsoft.com/webdev/2018/03/02/aspnetcore-2-1-identity-ui/

Todavía es posible andamiar las vistas de identidad en su propio proyecto si prefiere vistas locales: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.1 & tabs = visual-studio

Joe Audette
fuente
116
Pulgares arriba por la respuesta, y pulgares abajo por Microsoft. ¿Cuál es el punto de ocultar el código de los desarrolladores y darles una interfaz de usuario básica para usar para Auth? Eso es tan divertido. Vamos, Microsoft, queremos analizar el código, aprenderlo, romperlo, arreglarlo e implementarlo. Esto es raro.
Teoman shipahi
44
¿Hay algún comando PM para que podamos obtener todos los archivos de identidad a local?
panky sharma
3
@pankysharma Acabo de agregar una respuesta con un comando para hacerlo (en caso de que alguien en el futuro lo necesite).
Alisson
3
¿En serio tenemos que usar las páginas de Razor? ¿No hay una opción para simplemente andamiar vistas MVC regulares?
sentido horario
Si alguien más es tonto como yo ... Me tomó mucho más tiempo del que debería darme cuenta de que puede ver el código Get / Post haciendo clic derecho en el archivo y seleccionando "Ir al modelo de página"
Zapato
59

Puede hacer esto desde Visual Studio, haga clic derecho en su proyecto y seleccione Agregar-> Nuevo elemento andamio

Nuevo artículo andamio

Luego seleccione Identidad y haga clic en Agregar Seleccionar identidad

Ahora seleccione las páginas que desea anular. Desplegar clase de contexto de datos: y su espacio de nombres y contexto deben ser completados previamente por usted.

Seleccionar páginas

Finalmente haga clic en Agregar. Si ya tiene archivos de anulación existentes (es decir, de la plantilla), esto le advertirá sobre la sobrescritura.

John Rah
fuente
Esto de hecho funciona. Sin embargo, mi código no se compilaría limpiamente después de haber importado la página de inicio de sesión, la página que me interesa personalizar. La solución se puede encontrar aquí: stackoverflow.com/questions/58277172/… .
Yossi Geretz el
Gracias por la gran respuesta John, ¿Alguna idea de por qué el menú desplegable de clases de usuario (al final del formulario) está desactivado?
Hamza Khanzada
1
Gracias, hizo el trabajo 👍
AhmadMM
De memoria, la clase de usuario se habilita una vez que crea una clase de contexto de datos (haga clic en el botón +)
John Rah
14

Haga clic derecho en el proyecto, seleccione Add -> New Scaffold Item, en el cuadro de diálogo seleccione Identidad en el panel izquierdo.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí


También puede generar estas páginas con este comando:

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

Asegúrese de reemplazar con su propio espacio de nombres + nombre DbContext. Las páginas se generan aquí:

ingrese la descripción de la imagen aquí


Si ves este problema:

La función 'literal predeterminado' no está disponible en C # 7.0. Utilice la versión de idioma 7.1 o superior.

Puede solucionarlo agregándole esto .csprojy reconstruyéndolo:

<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
fuente
ERROR: dotnet: Andamio falló. No se pudo encontrar el archivo del proyecto en la carpeta
Diego Venâncio
@ DiegoVenâncio, ¿lo reemplazó WebApplication1.Data.ApplicationDbContextpor el espacio de nombres y el nombre de archivo correctos?
Alisson
2
Por supuesto, trabaje después de eliminar esta última línea: <PackageReference Include = "Microsoft.CodeAnalysis.CSharp.Workspaces" Version = "3.2.0-beta3-final" />
Diego Venâncio
1
También puede hacerlo a través de Visual Studio Solution Explorer stackoverflow.com/a/54995794/2073738
Suit Boy Apps
1
@DaImTo no debería haber guiones entre dotnet y aspnet. Debería ser dotnet aspnet-codegenerator. Tal vez este es el problema?
Alisson
6

'Si desea que todo el código de identidad esté en su aplicación para poder cambiarlo como quiera, puede usar el nuevo andamio de identidad para agregar el código de identidad a su aplicación. Todo el código de identidad andamio se genera en una carpeta de área específica de identidad para que permanezca bien separado del código de su aplicación.

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

Funciona bastante bien y fácil para mí.

GioLopera
fuente
1
cómo cambiar para ver o editar el código de identidad en localhost
panky sharma
¡Utilicé esto hoy en un proyecto existente en el que actualicé a 2.2, con DbContext existente y funcionó increíble una vez que le dije a mi contexto existente que heredaba de Identity!
jamheadart
1

Poco tarde para la fiesta, pero después de las frustraciones con la IU de identidad, me di por vencida. Crea tus proyectos sin él. Mi consejo es (cuando use 2.1 o 2.2) cree su propia cuenta / administre controladores y páginas mvc. Será necesaria alguna depuración de startup.cs. También deshabilite la opción de compilación de vista de publicación (es decir, views.dll). Tal vez no tengo una opción establecida, pero el compilador ignora por completo cualquier cambio en los bloques de script a nivel de página.

Will Hunt
fuente