如何确定用户是否启用了身份验证器

时间:2019-05-21 20:28:16

标签: c# asp.net-core razor asp.net-identity

我正在使用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>
    }

    ///...
}

1 个答案:

答案 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并不会太糟(因为用户不会经常访问此页面)。