Что может помешать распознаванию пользовательского UserClaimsPrincipalFactory, даже если он зарегистрирован в DI?C#

Место общения программистов C#
Ответить
Anonymous
 Что может помешать распознаванию пользовательского UserClaimsPrincipalFactory, даже если он зарегистрирован в DI?

Сообщение Anonymous »

Ну, 4 часа на это, и я озадачен, почему DI не использует зарегистрированную пользовательскую UserClaimsPrincipalFactory.
Фабрика:

Код: Выделить всё

using System.Security.Claims;
using Domain.Identity;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
using Shared.Authorization;

namespace Infrastructure.Identity
{
public class AppClaimsPrincipalFactory : UserClaimsPrincipalFactory
{
public AppClaimsPrincipalFactory(
UserManager userManager,
IOptions options) : base(userManager, options)
{
}

public override async Task CreateAsync(ApplicationUser user)
{
var principal = await base.CreateAsync(user);
var identity = (ClaimsIdentity)principal.Identity!;

// Add custom claims
identity.AddClaim(new Claim(AppClaims.CompanyId, user.CompanyId.ToString()));

return principal;
}

protected override async Task GenerateClaimsAsync(ApplicationUser user)
{
var identity = await base.GenerateClaimsAsync(user);
identity.AddClaim(new Claim(AppClaims.CompanyId, user.CompanyId.ToString()));
return identity;
}
}}
Не беспокойтесь о коде методов, я просто хочу, чтобы в них сработали точки останова. На данный момент я не могу зарегистрировать это и использовать в платформе Idenity Core 8.
Ниже показано, как я пытаюсь это зарегистрировать:

Код: Выделить всё

using Domain.Identity;
using Infrastructure.Persistence.Context;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection;

namespace Infrastructure.Identity;

internal static class Startup
{
internal static IServiceCollection AddIdentity(this IServiceCollection services)
{
services
.AddIdentity(options =>
{
options.Password.RequiredLength = 6;
options.Password.RequireDigit = false;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = true;
options.User.RequireUniqueEmail = true;
})
.AddEntityFrameworkStores()
.AddClaimsPrincipalFactory()
.AddDefaultTokenProviders();

services.AddTransient();

return services;
}
}
Я перепробовал очень много комбинаций вышеперечисленного, например:

Код: Выделить всё

services.AddScoped();
Я добавлял и удалял различные комбинации:

Код: Выделить всё

.AddClaimsPrincipalFactory()
ничего не зарегистрирует это для использования?
помогите!

Подробнее здесь: https://stackoverflow.com/questions/785 ... sed-even-t
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»