.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)
同じ問題がありました。Startup.csファイルとIdentityHostingStartup.csファイルの2つの異なるファイルに同時にサービスを登録していました。
次のように、両方のファイルにサービスを登録することにしました。
私はこのファイルに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") ) );
このファイルに、DefaultIdentity、Roles、およびEntityFrameworkstoresを登録しました//I registered the DefaultIdentity, the Roles and the EntityFrameworkstores services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddRoles<IdentityRole>().AddEntityFrameworkStores<IdentityDbContext>();
私の場合、問題は追加後でした:
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
以下のコードと競合しています、Startup.cs
:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyConnectionString")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();