我正在使用使用身份框架来验证用户的ASP.NET Core 3.0应用程序。DataSource是MS SQL Server数据库。
作为两个因素身份验证,配置了默认的MS Authenticator。
实际上,我有一些用户启用了身份验证者,有些(大多数(没有。那些没有的人,我想显示一个额外的菜单项。大多数菜单项是根据角色构建的,而且效果很好。
这是可以使用框架的,还是我必须自己查询用户表?
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
@if (SignInManager.IsSignedIn(User))
{
//...
<a href="#" class="dropdown-toggle">Profile</a>
//...
@if (!_2faEnabled) //How to determine _2faEnabled?
{
<li><a href="~/Profile/Manage/EnableAuthenticator">Enable 2FA</a></li>
}
///...
}
通过使用UserManager
AS获取当前用户:
var user = await UserManager.GetUserAsync(User);
然后从user
对象获取TwoFactorEnabled
值。
注意:如果Enable 2FA
在主菜单中,例如:home |项目|任务|启用2FA |..ETC。然后,IMO这将是一个问题,因为您每次用户在您的网站中导航时都会达到数据库。Soooo,您可以考虑在第一次从DB获得user.TwoFactorEnabled
的值。
如果Enable 2FA
在特定页面内部,例如:Manage 2FA
及其内部,您会得到the current user
,然后检查TwoFactorEnabled
并不糟糕(因为用户将无法经常访问此页面(。
可以使用" getvalidtwofactorprovidersasync"
来完成var twoFactorProviders = await _userManager.GetValidTwoFactorProvidersAsync(user);
您将获得提供商,例如"电子邮件"&&quot" authenticator"
请注意,要列出电子邮件和电话,必须在Aspnetusers表中存在两个值,并且都应确认
另一种方法是检查" getAuthenticatorKeyNc"是否返回null:
var authenticatorKey = await _userManager.GetAuthenticatorKeyAsync(user);