AddIdentity () завершается ошибкой «InvalidOperationException: схема уже существует: Identity.Application» - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь добавить логин на моем сайте .NET Core 2.1

Я следую это , руководство и более конкретно, это (для входа в Facebook)

После добавления следующих строк в startup.cs, внутри ConfigureServices-method

 public void ConfigureServices(IServiceCollection services)
 {
    ...
    services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
    ...
 }

Я получаю сообщение об ошибке при запуске приложения. Без этих строк работает "ок". Пользователь может войти в Facebook и одобрить мою заявку, и я получаю электронную почту, а что нет. Но я предполагаю, что информация о пользователе не будет добавлена ​​в мою базу данных

InvalidOperationException: схема уже существует: Identity.Application Microsoft.AspNetCore.Authentication.AuthenticationOptions.AddScheme (строка name, Action configureBuilder) ...

Код проходит мимо добавленных строк, и ошибка появляется через некоторое время (во время запуска). Я выполнил поиск в своем проекте (который представляет собой простое веб-приложение .NET Core 2.1 из шаблона), и я не вижу других способов использования «AddIdentity».

Я нашел «AddDEfaultIdentity ()», прокомментировал эту строку. но тогда я получил

InvalidOperationException: нет службы для типа 'Microsoft.AspNetCore.Identity.UserManager`1 [Microsoft.AspNetCore.Identity.IdentityUser] был зарегистрирован. Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService (поставщик IServiceProvider, Тип serviceType)

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Для меня (ASP.NET Core v2) у меня было:

 services.AddIdentity<MyUser, MyRole>()
                    .AddEntityFrameworkStores<ApplicationDbContext>()
                    .AddUserStore<MyUserStore>()
                    .AddRoleStore<MyRoleStore>()
                    .AddRoleManager<MyRoleManager>()
                    .AddDefaultTokenProviders();

в Startup.cs. И когда я создал Identity, он добавил IdentityHostingStartup.cs, и я скопировал / вставил другой похожий, но стандартный блок, основываясь на некотором коде отправки электронной почты:

builder.ConfigureServices((context, services) =>
                {
                    services.AddDefaultIdentity<IdentityUser>(config =>
                    {
                        config.SignIn.RequireConfirmedEmail = false;//TODO:
                    })
                    .AddEntityFrameworkStores<ApplicationDbContext>();
                });

Итак, я переместил ВСЕ настройки Identity в IdentityHostingStartup.cs (т.е. только 1 конфигурация !!!), он работал как положено ...

0 голосов
/ 03 июля 2018

Это изменение по сравнению с .Net Core 2.0-> 2.1, я думаю, что руководство не было обновлено.

После того, как наткнулся на этот пост I: Удалены строки всего сервиса. Вызов AddIdentity () ... (все 3 строки) (но, конечно, сохранил вызов AddDefaultIdentity (), который был там до

Изменено обратно в ApplicationDbContext.cs с

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>

до

public class ApplicationDbContext : IdentityDbContext<IdentityUser>

... Так что если вы начинаете с нуля (новый .Net Core 2.1-шаблон), все, что вам нужно сделать, это добавить строки

     services.AddAuthentication().AddFacebook(facebookOptions =>
        {
            facebookOptions.AppId = Configuration["...FacebookLogin:AppId"];
            facebookOptions.AppSecret = Configuration["...FacebookLogin:ClientSecret"];
        });

из учебника.

По крайней мере, это "исправление" позволяет мне пройти регистрацию так, чтобы пользователи не регистрировались, куда не направился мой "ApplicationUser" (в случае / когда я хочу добавить дополнительные пользовательские свойства) ... так как нет ссылки к этому больше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...