我在使用ASPNET Core API进行身份验证。一切正常,除了事实是,每当我尝试通过GeneratePasswordResetToken更改密码时,都会抱怨没有IUserTokenprovider 。我们收到类似“未注册名为'Default'的IUserTokenProvider的错误。
我们为不同的客户使用不同的数据库,因此我们想提供一个到上下文的连接字符串,以便每个调用都能够引用不同的数据库。据我了解,这在启动时是不可能的。然后,我们尝试在DbContext和有效的UserManager中执行此操作。
现在,我们的代码如下所示(仅相关部分):
启动
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
options.Tokens.ProviderMap.Add("Default", new TokenProviderDescriptor(typeof(IUserTwoFactorTokenProvider<ApplicationUser>)));
})
.AddDefaultTokenProviders();
}
Run Code Online (Sandbox Code Playgroud)
DbContext
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
private static string _connectionString
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, string connectionString) : base (options)
{
_connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionString);
base.OnConfiguring(optionsBuilder);
}
}
Run Code Online (Sandbox Code Playgroud)
用户管理器
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(string connectionString, ApplicationDbContext context) : base(new UserStore<ApplicationUser>(context), null, new PasswordHasher<ApplicationUser>(), null, null, null, new …Run Code Online (Sandbox Code Playgroud)