Где находятся страницы входа и регистрации в приложении AspNet Core?

139

В VS 2017 я создал новое веб-приложение ASP.NET Core. На второй странице мастера я выбрал веб-приложение, а для аутентификации выбрал «Учетные записи отдельных пользователей».

Теперь я пытаюсь найти страницы, связанные с / Account / Register и / Account / Login .

_Layout.cshtml включает _LoginPartial.cshtml, как и в классическом 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>

Если пользователь не вошел <a>в систему, _LoginPartial включает теги, указывающие на страницы входа и регистрации:

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

Кажется, все это имеет смысл. Но я ожидал, что структура папок «Области» будет включать папки «Регистрация» и «Вход». Это не. Единственное, что я нашел, это _ViewStart.cshtml

Файловая структура областей

Я знаю, что шаблонный код работает. Когда я запускаю проект, ссылка «Регистрация» указывает на «/ Identity / Account / Register», а ссылка для входа указывает на «/ Identity / Account / Login». При нажатии на ссылку «Регистрация» открывается страница регистрации с текстом «Создать новую учетную запись».

Но я не могу найти текст «Создать новую учетную запись» в проекте.

Может кто-нибудь сказать мне, что мне не хватает?

Bob.at.Indigo.Health
источник

Ответы:

143

Во время предварительного просмотра asp.net core 2.1 было объявлено, что пользовательский интерфейс Identity будет перемещен в новую библиотеку классов Razor. https://blogs.msdn.microsoft.com/webdev/2018/03/02/aspnetcore-2-1-identity-ui/

Если вы предпочитаете локальные представления, по-прежнему возможно объединить представления удостоверений в свой собственный проект: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.1 и язычки = зрительно-студия

Джо Одетт
источник
117
Большой палец вверх за ответ и большой палец вниз за Microsoft. Какой смысл скрывать код от разработчиков и предоставлять им базовый интерфейс для аутентификации? Это так весело. Давай, Microsoft, мы хотим изучить код, изучить его, сломать, исправить и развернуть. Это странно.
Теоман Шипахи
4
есть ли какая-нибудь команда PM, чтобы мы могли получить все файлы идентификации на локальном уровне.
панки Шарма
3
@pankysharma Я только что добавил ответ с командой для этого (на случай, если кому-то в будущем это понадобится).
Alisson
3
Неужели мы серьезно должны использовать страницы Razor? Нет возможности просто формировать обычные представления MVC?
часовой
Если кто-то еще такой тупой, как я ... Мне потребовалось больше времени, чтобы понять, что вы можете просмотреть код получения / публикации, щелкнув файл правой кнопкой мыши и выбрав «Перейти к модели страницы»
Shoe
59

Вы можете сделать это из Visual Studio, щелкните правой кнопкой мыши свой проект и выберите Добавить-> Новый шаблонный элемент.

Новый предмет лесов

Затем выберите Identity и нажмите Add. Выберите личность

Теперь выберите страницы, которые хотите переопределить. Выпадающий класс контекста данных: ваше пространство имен и контекст должны быть предварительно заполнены за вас.

Выбрать страницы

Наконец, нажмите «Добавить». Если у вас уже есть файлы переопределения (например, из шаблона), это предупредит об их перезаписи.

Джон Ра
источник
Это действительно работает. Однако мой код не скомпилировался чисто после того, как я импортировал страницу входа - страницу, которую я хочу настроить. Решение можно найти здесь: stackoverflow.com/questions/58277172/… .
Йоси
Спасибо за отличный ответ, Джон, есть идеи, почему раскрывающийся список классов пользователей (в конце формы) отключен?
Хамза
1
Спасибо, что сделал свою работу 👍
AhmadMM
По памяти пользовательский класс становится доступным после создания класса контекста данных (нажмите кнопку +)
Джон Ра
14

Щелкните правой кнопкой мыши проект, выберите Add -> New Scaffold Item, в диалоговом окне выберите " Идентификация" на левой панели.

введите описание изображения здесь

введите описание изображения здесь


Вы также можете сгенерировать эти страницы с помощью этой команды:

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

Убедитесь, что вы заменили свое собственное пространство имен + имя DbContext. Здесь создаются страницы:

введите описание изображения здесь


Если вы видите эту проблему:

Функция «литерал по умолчанию» недоступна в C # 7.0. Пожалуйста, используйте версию 7.1 или выше.

Возможно, вы сможете исправить это, добавив это к себе .csprojи перестроив:

<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
источник
ОШИБКА: dotnet: не удалось создать леса. Не удалось найти файл проекта в папке
Диего Венансио
@ DiegoVenâncio вы заменили WebApplication1.Data.ApplicationDbContextправильное пространство имен и имя файла?
Alisson
2
Конечно, поработайте после удаления этой последней строки: <PackageReference Include = "Microsoft.CodeAnalysis.CSharp.Workspaces" Version = "3.2.0-beta3-final" />
Диего Венансио
1
Вы также можете сделать это через обозреватель решений Visual Studio stackoverflow.com/a/54995794/2073738
Suit Boy Apps
1
@DaImTo не должно быть дефисов между dotnet и aspnet. Так и должно быть dotnet aspnet-codegenerator. Может в этом проблема?
Алиссон,
6

'Если вы хотите, чтобы в вашем приложении был весь идентификационный код, чтобы вы могли изменить его, как хотите, вы можете использовать новый шаблон идентификации, чтобы добавить идентификационный код в свое приложение. Весь шаблонный идентификационный код генерируется в папке, специфичной для идентификации, так что он остается четко отделенным от кода вашего приложения ».

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

Для меня это работает довольно легко и просто.

GioLopera
источник
1
как изменить, чтобы просмотреть или отредактировать идентификационный код на локальном
хосте
Я использовал это сегодня в существующем проекте, в котором я обновился до 2.2, с существующим DbContext, и он отлично сработал, как только я сказал своему существующему контексту, что он наследуется от Identity!
jamheadart
1

Немного поздно на вечеринку, но после разочарования в Identity UI я отказался от него. Создавайте свои проекты без него. Мой совет (при использовании 2.1 или 2.2) создать свою учетную запись / управлять контроллерами и страницами mvc. Потребуется некоторая отладка startup.cs. Также отключите параметр компиляции представления публикации (например, views.dll). Возможно, у меня нет набора параметров, но компилятор полностью игнорирует любые изменения в блоках сценария на уровне страницы.

Будет охота
источник