在 Umbraco 8 的 2 因素身份验证模板中获取用户信息

Get user information in 2 factor authentication template in Umbraco 8

我正在 Umbraco 8 中为用户实施 2FA,在登录后但在输入代码之前,我需要做一些检查。对于此检查,我需要知道哪个用户已登录,但我不知道如何才能知道哪个用户已登录。

用户在后台登录后,我会显示一个 html 模板,这是由这行代码实现的:

public string GetTwoFactorView(IOwinContext owinContext, UmbracoContext umbracoContext, string username) =>
        PackageConstants.PathToMfaHtmlTemplate;

模板链接到 angularjs 控制器:

<div ng-controller="mfaLoginController" class="umb-login-container">
  //...
</div>

在我的控制器中,我可以访问服务:

userService
authResource

但两者似乎都没有用户数据。我可以在此处注入其他服务来为我提供用户数据吗?

我需要从这个控制器对 Umbraco API 进行 API 调用 API:

[IsBackOffice, PluginController("LoginMfa")]
public class MfaLoginApiController : UmbracoApiController
{
     //...
}

在一个端点中,我成功地使用下一行代码检索了 OWIN TwoFactorCookie:

var mfaCookie = Request.Headers.GetCookies(".AspNet.UmbracoTwoFactorCookie").FirstOrDefault()
                .Cookies.FirstOrDefault(cookie => cookie.Name == ".AspNet.UmbracoTwoFactorCookie").Value;

这 returns 一个看起来像加密的字符串。有没有办法解密这个字符串并从这个 cookie 中获取用户数据(用户 Id 就足够了),如果它完全存储在这个 cookie 中?

或者此时是否有更好的方法来检索用户?

我明白了。在为我的问题研究可能的不同解决方案时,我在 Umbraco 的 AuthenticatorController 中看到了下一个代码(非常好,它是开源的):

private BackOfficeSignInManager _signInManager;

private BackOfficeSignInManager SignInManager => _signInManager ?? (_signInManager = TryGetOwinContext().Result.GetBackOfficeSignInManager());

幸运的是,我也可以在我的 API 控制器中使用这段代码,这行代码满足了我的需要。

var userId = await SignInManager.GetVerifiedUserIdAsync();