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



我正在使用使用身份框架来验证用户的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);

相关内容

  • 没有找到相关文章

最新更新