找不到DataProtectorTokenProvider构造函数方法

问题描述 投票:0回答:1

我一直在.NET Core 2.2中使用两个具有身份的自定义令牌提供程序。迁移到3.1后,我遇到了此异常

System.Exception: Could not resolve a service of type 'Microsoft.AspNetCore.Identity.UserManager`1[[App.Domain.Entities.AppUser, App.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' for the parameter 'userManager' of method 'Configure' on type 'App.API.Startup'.
 ---> System.MissingMethodException: Method not found: 'Void Microsoft.AspNetCore.Identity.DataProtectorTokenProvider`1..ctor(Microsoft.AspNetCore.DataProtection.IDataProtectionProvider, Microsoft.Extensions.Options.IOptions`1<Microsoft.AspNetCore.Identity.DataProtectionTokenProviderOptions>)'.
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)

我认为这是UserManager构造函数中试图解析所有令牌提供者的部分。

这里是身份配置

namespace App.Identity
{
    public static class IdentityExtensions
    {
        public static IServiceCollection AddAppIdentity(this IServiceCollection services, IConfiguration configuration)
        {
            services.AddIdentity<AppUser, AppRole>(options =>
                {
                    options.Password.RequireDigit = true;
                    options.Password.RequireLowercase = true;
                    options.Password.RequireNonAlphanumeric = true;
                    options.Password.RequireUppercase = true;

                    options.Tokens.EmailConfirmationTokenProvider = EmailConfirmationTokenProviderOptions.ProviderName;
            })
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders()
            .AddEmailConfirmationTokenProvider()
            .AddMagicLinkLoginTokenProvider();

        return services;
    }

    private static IdentityBuilder AddMagicLinkLoginTokenProvider(this IdentityBuilder builder)
    {
        return builder.AddTokenProvider(
            MagicLinkLoginTokenProviderOptions.ProviderName, 
            typeof(MagicLinkLoginTokenProvider<>).MakeGenericType(builder.UserType)
        );
    }

    private static IdentityBuilder AddEmailConfirmationTokenProvider(this IdentityBuilder builder)
    {
        return builder.AddTokenProvider(
            EmailConfirmationTokenProviderOptions.ProviderName, 
            typeof(EmailConfirmationTokenProvider<>).MakeGenericType(builder.UserType)
        );
    }
}

}

UPDATE:

[经过一些调查后,我注意到最新的DataProtectorTokenProvider具有包含ILogger的构造函数签名,而我的(Microsoft.AspNetCore.Identity v2.2)仅具有dataProtectionProvideroptions。我是引用错误的软件包还是?

migration asp.net-core-2.2 asp.net-core-3.1 asp.net-core-identity
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.