web-dev-qa-db-ja.com

AddIdentity()が失敗する「InvalidOperationException:スキームはすでに存在しています:Identity.Application」

.NET Core 2.1サイトにFacebookログインを追加しようとしています

Im this 、ガイド、およびより具体的な this(facebookログイン用)

以下の行をstartup.csに追加した後、ConfigureServices-method内で

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

アプリケーションを実行すると、エラーメッセージが表示されます。これらの行がなければ、「大丈夫」です。ユーザーはFacebookにログインして私のアプリケーションを承認でき、私は電子メールを受け取りますが、そうではありません。しかし、ユーザー情報が私のデータベースに追加されないと思います

InvalidOperationException:スキームは既に存在しています:Identity.ApplicationMicrosoft.AspNetCore.Authentication.AuthenticationOptions.AddScheme(string name、Action configureBuilder)...

コードは追加された行を通過し、しばらくすると(起動中に)エラーが表示されます。私は自分のプロジェクト(テンプレートから.NET Core 2.1 Webアプリケーションにすぎない)を検索しましたが、 "AddIdentity"の他の使用法が見つかりません。

私は「AddDEfaultIdentity()」を見つけました、その行をコメントアウトしました。しかし、私は得た

InvalidOperationException:タイプのサービスがありません 'Microsoft.AspNetCore.Identity.UserManager`1 [Microsoft.AspNetCore.Identity.IdentityUser]'が登録されています。 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider、Type serviceType)

13
Cowborg

同じ問題がありました。Startup.csファイルとIdentityHostingStartup.csファイルの2つの異なるファイルに同時にサービスを登録していました。

私がしたこと?

次のように、両方のファイルにサービスを登録することにしました。

IdentityHostingStartup.cs

私はこのファイルにID DBコンテキストのみを登録しました:
//lets register identity db context builder.ConfigureServices((context, services) => { services.AddDbContext<IdentityDbContext>(options => options.UseSqlServer( context.Configuration.GetConnectionString("IdentityDBConnection"), x => x.MigrationsAssembly("WebApplication1") ) );

Startup.cs

このファイルに、DefaultIdentity、Roles、およびEntityFrameworkstoresを登録しました
//I registered the DefaultIdentity, the Roles and the EntityFrameworkstores services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddRoles<IdentityRole>().AddEntityFrameworkStores<IdentityDbContext>();

0
Hamza Dahmoun

私の場合、問題は追加後でした:

services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();

以下のコードと競合しています、Startup.cs

services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyConnectionString")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
0
Diego Venâncio