我正在使用ASP.NET Core 3.0应用程序,该应用程序使用Identity Framework对用户进行身份验证。数据源是MS SQL Server数据库。
作为两因素身份验证,默认的MS Authenticator已配置并可以正常工作。
实际上,我有一些启用了Authenticator的用户,还有一些(大多数)没有启用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>
}
///...
}
答案 0 :(得分:1)
使用UserManager
来获取当前用户:
var user = await UserManager.GetUserAsync(User);
然后从TwoFactorEnabled
对象获取user
值。
注意:如果Enable 2FA
位于主菜单中,例如:主页|项目|任务启用2FA | ..等等。那么IMO这将是一个问题,因为每次用户浏览您的网站时您都会访问数据库。因此,您可能会在第一次从数据库获取user.TwoFactorEnabled
的值后考虑将其存储在某个地方。
如果Enable 2FA
位于特定页面内,例如:Manage 2FA
,则在其中得到the current user
,然后检查TwoFactorEnabled
并不会太糟(因为用户不会经常访问此页面)。