Как сделать, чтобы идентичность использовала MVC вместо бритвенных страниц в ядре asp.net 2.2 - PullRequest
0 голосов
/ 01 апреля 2019

Начиная с ядра 2.1 для asp.net, MVC не поддерживается как модель по умолчанию с Identity. Я хочу запустить Identity с MVC в ядре asp.net 2.2

Сделайте длинную историю короткой. Это сайт asp.net 4.6.2 с локальной базой данных, который я хочу обновить до ядра 2.2 asp.net. Я думал, что это будет просто. Так неправильно я был. Итак, что я сделал:

  1. Создан новый проект ASP.net core 2.0 с локальной идентификацией
  2. Сначала создайте контекст ef с базой данных с помощью Scaffold-DbContext
  3. Исправлено, так что EF правильно загружается при запуске.
  4. Удалены aspnetusers, aspnetuserroles, aspnetuserlogin, модели aspnetroles из сгенерированного скаффолда с помощью Scaffold-Dbcontext
  5. Обновлен ApplicationDbContext для наследования от IdentityDbContext. ApplicationUser наследуется от IdentityUser
  6. После того, как я подделал, что миграция была применена, я вручную добавил следующие столбцы в aspnetusers

6.1 ConcurrencyStamp

6.2 NormalizedUserName

6.3 NormalizedEmail

6.4 Изменено имя LockoutEnd? заблокировать конец

Система строит, но я все еще не могу заставить ее использовать контроллер учетной записи. Я следовал за шагами в https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.2 безрезультатно. Кажется, что я делаю, я не могу заставить его читать контроллер mvc даже после того, как я установил личность.

Я думаю, что разница в реализациях Identity в ядре asp.net 2.X Identity либо высока, либо сужена относительно более ранних реализаций.

Включенная часть моего запуска

       services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddIdentity<ApplicationUser, IdentityRole>()
            // services.AddDefaultIdentity<IdentityUser>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
            .AddRazorPagesOptions(options =>
            {
                options.AllowAreas = true;
                //options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
                //options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
            });

        services.ConfigureApplicationCookie(options =>
        {
            options.LoginPath = $"/Account/Login";
            options.LogoutPath = $"/Account/Logout";
            options.AccessDeniedPath = $"/Account/AccessDenied";
        });

        // using Microsoft.AspNetCore.Identity.UI.Services;
        services.AddSingleton<IEmailSender, EmailSender>();
    }

Я хочу использовать MVC с Identity Core 2.2 со старой базой данных из Identity .Net.

Так есть предложения?

1 Ответ

1 голос
/ 01 апреля 2019

Непонятно, что именно вы делаете, но звучит так, как будто вы поместили Identity Razor Pages в свой проект.Если это так, то они будут иметь прецедент над вашим контроллером, поскольку это более физический маршрут.

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

...