2017-12-30 32 views
0

私のアプリケーションで基本認証を実装しようとしています。ユーザはpostgresqlデータベースに格納する必要があります。asp.netコア2.0アイデンティティエンティティフレームワークのユーザーが保存されません

ユーザーを作成できますが、どこに格納されているのかわかりません。私のデータベースには保存されていません。しかし、作成されたすべてのユーザーは、UserManagerから保存され、アクセス可能です。再起動後、作成されたユーザーはまだそこにいます。だから私のデータベースやメモリには格納されません。

私はこの部分を使って、エンティティフレームワークとの識別を有効にしました。

services.AddIdentity<User, Role>() 
    .AddEntityFrameworkStores<DatabaseContext>() 
    .AddDefaultTokenProviders(); 

UserRoleクラスは単なるキータイプとしてGuidIdentityUserIdentityRoleから拡張しています。

私はnpgsqlをデータベースとして使用しています。

var connectionString = Configuration.GetConnectionString("DatabaseContext"); 
services.AddEntityFrameworkNpgsql() 
    .AddDbContext<DatabaseContext>(options => options.UseNpgsql(connectionString)); 

私はコントローラにMicrosoft.AspNetCore.Identity.UserManager<User>を注入し、ユーザーを作成し、取得の場合:移行が正しく移行されているので、私はそれが働いているかなり確信しています。

なぜユーザーがデータベースに保存されていないのですか?

答えて

1

UserManager<TUser>は、注射されたIUserStore<TUser>を探します。それがあなたのデータベースでユーザーとチャットを持続させる方法です。ユーザストアのデフォルトの実装can be found here.デフォルトでは、この実装はDbContextを直接注入するように見えます。

シングの私が試してみた:

  • をご利用のサービスのコレクションからIdentityDbContext
  • 要求IUserStoreからデータベースコンテキストが継承していることを確認し、それが使用しているもののデータベースコンテキストを参照するContextプロパティを見てください。

ユーザーがデータベースにアクセスしていないことが確実な場合は、IUserStore<TUser>は、使用しているコンテキストと異なるコンテキストを使用している必要があります。その場合は、他のコンテキストを削除するか、より具体的なバージョンのIUserStoreをサービスコレクションに追加してください。例:サービス内のIUserStore<TUser>UserStore<TUser, IdentityRole, DatabaseContext, string>に置き換えます。 (基本クラスDbContextの代わりにDatabaseContextを指定していることに注意してください)

+0

問題は、私のデータベースコンテキストが 'DBContext'から継承しているということでした。私は' IdentityDbContext'に変更しました。 –

関連する問題