Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无IUserTwoFactorTokenProvider<;TUser>;命名为';默认值';注册_C#_Asp.net Mvc_Asp.net Core - Fatal编程技术网

C# 无IUserTwoFactorTokenProvider<;TUser>;命名为';默认值';注册

C# 无IUserTwoFactorTokenProvider<;TUser>;命名为';默认值';注册,c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,我正在一个asp.net核心mvc项目(.net 5)上工作,但与身份相关的事情很难解决 我有一个类HedgehogUserAccount继承自IdentityUser,还有另外两个类继承自HedgehogUserAccount:CustomerAccount和UserAccount(名称选择不当,我知道-一切正常时我会更改它)。经过大量工作后,我成功地使迁移工作正常,程序编译并运行,但当我尝试注册用户时,我遇到以下错误: NotSupportedException:未注册名为“Default”

我正在一个asp.net核心mvc项目(.net 5)上工作,但与身份相关的事情很难解决

我有一个类
HedgehogUserAccount
继承自
IdentityUser
,还有另外两个类继承自
HedgehogUserAccount
CustomerAccount
UserAccount
(名称选择不当,我知道-一切正常时我会更改它)。经过大量工作后,我成功地使迁移工作正常,程序编译并运行,但当我尝试注册
用户时,我遇到以下错误:

NotSupportedException:未注册名为“Default”的IUSERTwoFactoryTokenProvider。

错误来自我的注册代码中的第90行(请参阅下面粘贴的完整代码-它几乎与脚手架注册页面相同):

var code=wait\u userManager.GenerateEmailConfirmationTokenAsync(用户)

我的Startup.cs的相关部分(我认为)如下所示:

services.AddIdentity(options=>options.SignIn.RequireConfirmedAccount=true)
.AddEntityFrameworkStores。”);
如果(_userManager.Options.SignIn.RequiredConfirmedAccount)
{
return RedirectToPage(“RegisterConfirmation”,new{email=Input.email,returnUrl=returnUrl});
}
其他的
{
wait _signInManager.SignInAsync(用户,ispersist:false);
返回LocalRedirect(returnUrl);
}
}
foreach(result.Errors中的变量错误)
{
AddModelError(string.Empty,error.Description);
}
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回页();
}
}
}

在经历了很多麻烦之后,我现在对我的问题得出了一个结论。我通过实现自己的令牌提供商并在系统中注册解决了这个问题。如果其他人和我一样撞到了同一堵墙,我将我的解决方案留在这里

步骤1:实施IUSERTwoFactoryTokenProvider

公共类HedgehogEmailTwoFactory身份验证:IUSERTwoFactoryTokenProvider其中TUser:HedgehogUserAccount
{
公共任务cangenerationofactortokenasync(UserManager管理器,TUser用户)
{
if(manager!=null&&user!=null)
{
返回Task.FromResult(true);
}
其他的
{
返回Task.FromResult(false);
}
}
//基于用户id、电子邮件和其他字符串生成简单令牌。
私有字符串生成器(HedgehogUserAccount用户,字符串用途)
{
字符串secretString=“coffeIsGood”;
返回secretString+user.Email+purpose+user.Id;
}
公共任务GenerateSync(字符串用途、UserManager管理器、TUser用户)
{
返回Task.FromResult(GenerateToken(用户,目的));
}
公共任务ValidateSync(字符串用途、字符串令牌、UserManager管理器、TUser用户)
{
返回Task.FromResult(token==GenerateToken(user,purpose));
}
}
步骤2:在服务中注册新的闪亮代币提供商

services.AddIdentityCore(options=>options.SignIn.RequireConfirmedAccount=true)
.AddRoles()

.AddEntityFrameworkStores

这是否回答了您的问题?谢谢@Jeremylakman的建议。不幸的是,我已经尝试了该页面上的所有内容。几年前,我也尝试了所有关于类似问题的建议:/我最终通过实现我自己的代币提供商解决了这个问题-也许不理想,但它很有魅力。谢谢你对我的问题感兴趣!