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

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

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

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

Это все имеет смысл. Но я ожидал, что структура папок Areas будет включать папки Register и Login. Это не. Единственное, что я нахожу, это _ViewStart.cshtml

Areas file structure

Я знаю, что работает защищенный код. Когда я запускаю проект, ссылка Register указывает на "/Identity/Account/Register", а ссылка "Войти" указывает на "/Identity/Account/Login". Нажав на ссылку "Регистрация", вы получите страницу регистрации, содержащую текст "Создать новую учетную запись".

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

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

Ответ 1

Во время предварительного просмотра 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 и язычки = зрительно-студия

Ответ 2

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

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

Это работает довольно хорошо и легко для меня.

Ответ 3

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

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

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

enter image description here


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

Функция "литерал по умолчанию" недоступна в С# 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" />

Ответ 4

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

New Scaffolded Item

Затем выберите Identity и нажмите Add Select Identity

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

Select Pages

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

Ответ 5

ASP.NET Core 2.1 с Identity автоматически включает в себя "Default UI". Это библиотека классов Razor Pages, которая ссылается через AddDefaultIdentity в Startup, которая под капотом буквально вызывает

Если вам нужны фактические файлы в вашем проекте, вам нужно их подкрасить. Щелкните правой кнопкой мыши свой проект в проводнике решений и выберите "Добавить"> "Новый элемент леса"... Затем нажмите "Идентификатор" слева, а затем кнопку "Добавить", Появится новое окно, позволяющее вам выбирать страницы, которые вы хотите включить, свой контекст и т.д. Настройте его так, как вам нравится, и

Также стоит отметить, что до тех пор, пока вы используете AddDefaultIdentity, пользовательский интерфейс по умолчанию все еще включен, а это значит, что вам действительно не нужны все файлы подкладок, если вы хотите их использовать. Они будут по существу функционировать как переопределения. Все, что конкретно включено в ваш проект, будет использоваться, а все, что отсутствует, будет выведено из пользовательского интерфейса по умолчанию.

Это также означает, что если вы хотите сделать что-то вроде стандартных действий и представлений контроллера вместо Razor Pages, пользовательский интерфейс по умолчанию будет по-прежнему активным и будет иметь приоритет. Вы должны использовать AddIdentity или AddIdentityCore вместо AddDefaultIdentity, если вы хотите, чтобы пользовательский интерфейс по умолчанию полностью отключился.

От

Ответ 6

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

Ответ 7

В дополнение к ответам, приведенным выше, я нашел следующую статью, объясняющую, как переопределить пользовательский интерфейс Identity от Microsoft: https://kenhaggerty.com/articles/article/aspnet-core-22-scaffold-identity-ui

Надеюсь это поможет.