Макет для страниц Identity / Account / Manage, сломанных после создания полного источника пользовательского интерфейса .Net Identity

Я следую этим руководствам:

  1. Scaffold Identity в проект MVC без существующей авторизации
  2. Создать полный источник пользовательского интерфейса идентификации

Следуя первому руководству, я получаю то, что ожидаю от страниц Identity / Account / Manage: введите описание изображения здесь

Однако после выполнения 2-го руководства макет нарушается. Боковое меню отсутствует. Приложение больше не находит Areas/Identity/Pages/Account/Manage/_Layout.cshtml, и я не понимаю, почему.

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

Это git diff.

namespace WebIdentity.Areas.Identity
{
    public class IdentityHostingStartup : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            builder.ConfigureServices((context, services) => {
                services.AddDbContext<IdentityDbContext>(options =>
                    options.UseSqlServer(
                        context.Configuration.GetConnectionString("IdentityDbContextConnection")));
 
-                services.AddDefaultIdentity<User>(options => options.SignIn.RequireConfirmedAccount = true)
-                    .AddEntityFrameworkStores<IdentityDbContext>();
+                services
+                    .AddIdentity<User, IdentityRole>(options => options.SignIn.RequireConfirmedAccount = true)
+                    .AddEntityFrameworkStores<IdentityDbContext>()
+                    .AddDefaultTokenProviders();
+
+                services
+                    .AddMvc()
+                    .AddRazorPagesOptions(options =>
+                    {
+                        options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
+                        options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
+                    });
+
+                services.ConfigureApplicationCookie(options =>
+                {
+                    options.LoginPath = $"/Identity/Account/Login";
+                    options.LogoutPath = $"/Identity/Account/Logout";
+                    options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
+                });
+
+                services.AddSingleton<IEmailSender, EmailSender>();
             });
         }
     }


person br3nt    schedule 26.11.2020    source источник
comment
Я добавил каждый шаг как коммит git: github.com/br3nt/WebIdentity   -  person br3nt    schedule 26.11.2020


Ответы (1)


Вызов AddDefaultIdentity аналогичен вызову следующего:

1: AddIdentity

2: AddDefaultUI

3: AddDefaultTokenProviders

Вам нужно добавить default UI в свой startup, как показано ниже (добавить .AddDefaultUI()):

  services
  .AddIdentity<User, IdentityRole>(options => options.SignIn.RequireConfirmedAccount = true)
  .AddDefaultUI()
  .AddEntityFrameworkStores<IdentityDbContext>()
  .AddDefaultTokenProviders();

Вы можете увидеть более подробную информацию о AddDefaultIdentity здесь .

person Yinqiu    schedule 26.11.2020
comment
Хорошо, да, то, что вы предлагаете, действительно работает, однако, согласно эти документы AddDefaultUI не нужны. Он несколько раз говорит следующее: If the Identity scaffolder was used to add Identity files to the project, remove the call to AddDefaultUI. Следуя коду, он выполняет намного больше, чем я хочу: /. - person br3nt; 26.11.2020
comment
Вы занимаетесь строительными лесами? Или вы выбрали личную аутентификацию при создании проекта. Проект, созданный скаффолдом, должен быть сгенерирован как this. - person Yinqiu; 26.11.2020
comment
Сначала я создал новое приложение MVC ASP.Net .Net 5.0 без аутентификации. Затем я перешел к Идентификация шаблона в проект MVC без существующей авторизации, а затем следуйте руководству Создайте полное руководство по созданию пользовательского интерфейса для идентификации. - person br3nt; 27.11.2020
comment
Я также повторил этот процесс, но с использованием .Net Core 3.1. - person br3nt; 27.11.2020
comment
И я также повторил этот шаг, но выбрал вариант аутентификации пользователя, а затем выполнил Scaffold Identity в проект MVC с авторизацией, а затем следуйте руководству Руководство по созданию полного пользовательского интерфейса идентификации. - person br3nt; 27.11.2020
comment
Итак, не имеет значения, какой маршрут вы выберете ... очевидно, что чего-то не хватает в Руководство по созданию полного источника пользовательского интерфейса Identity. - person br3nt; 27.11.2020
comment
Понимание этого предложения в документе должно заключаться в том, что до 2.1 AddDefaultIdentity не содержал AddDefaultUI метод, поэтому вам нужно добавить AddDefaultUI, вы можете увидеть здесь, поэтому вам нужно добавить AddDefaultUI, вы можете увидеть здесь, поэтому понимание удаления AddDefaultUI в документе должно быть таким: AddDefaultIdentity нужно удалить AddDefaultUI, а не AddIdentity нужно удалять. - person Yinqiu; 02.12.2020