在 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();
我正在 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();