エンティティをデータベースにスキャフォールディングして ID システムを構築し (Code-First)、IUserStore から継承する EmployeeStore を構築しましたが、OnPost メソッドが EmployeeStore で NormalizedUserName メソッドを使用しようとすると、常に UserManager へのトレースバック エラーが発生します。 (以下のエラーを確認してください)
例外が発生しました: CLR/System.NullReferenceException タイプ 'System.NullReferenceException' の例外が Nextekk.dll で発生しましたが、ユーザー コードで処理されませんでした: 'オブジェクト参照がオブジェクトのインスタンスに設定されていません。Nextekk.Models.EmployeeStore.SetNormalizedUserNameAsync (Employee employee, String normalizedName, CancellationToken cancelToken) で /home/Xxxxxx/Nxxxxxx/Models/EmployeeStore.cs:行 113 で Microsoft.AspNetCore.Identity.UserManager`1.d__82.MoveNext()
私は UserManager を EmployeeStore のコンストラクターに挿入し、それを呼び出して UserManager を直接使用しようとしましたが、これはオプションとしては本当に望んでいませんが、すべて無料です。
私の NormalizedUserName メソッドは次のようになります。
public Task SetNormalizedUserNameAsync(Employee employee, string normalizedName, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
if (employee == null)
{
throw new ArgumentNullException(nameof(employee));
}
if (normalizedName == null)
{
throw new ArgumentNullException(nameof(normalizedName));
}
// base.SetNormalizedUserNameAsync(Employee employee, string normalizedName, CancellationToken cancellationToken);
employee.NormalizedUserName = normalizedName;
// db.SaveChanges();
// return Task.CompletedTask;
return Task.FromResult<object>(null);
}
私のスタートアップ Identity Service は次のようになります。
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<Models.NextekkDBContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("NDB")));
// Add identity
services.AddIdentity<Employee, Role>()
.AddUserStore<EmployeeStore>()
.AddRoleStore<RoleStore>()
.AddEntityFrameworkStores<NextekkDBContext>()
.AddDefaultTokenProviders()
.AddClaimsPrincipalFactory<EmployeeClaimsPrincipalFactory>();
services.AddScoped<EmployeeClaimsPrincipalFactory>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseAuthentication();
私の質問は、CustomUserStore (EmployeeStore) を Microsoft Identity のデフォルトの UserManager で動作させる方法です。どんな助けでも大歓迎です。