C# 如何实现自定义方法User.Identity.GetLastUserToken()以获取双因素身份验证中最后分配的令牌?

C# 如何实现自定义方法User.Identity.GetLastUserToken()以获取双因素身份验证中最后分配的令牌?,c#,asp.net,asp.net-mvc-5,asp.net-identity,two-factor-authentication,C#,Asp.net,Asp.net Mvc 5,Asp.net Identity,Two Factor Authentication,我实现了如中所示的双因素身份验证,但我想在templete视图中向用户显示一个TokenViewModel对象,该对象有两个属性,TokenDate和TokenString由@user.Identity.GetLastUserToken()检索.TokenString在视图中 我就这么做 public static class ApplicationIdentityExtensions { public static string FindFirstValue(this ClaimsId

我实现了如中所示的双因素身份验证,但我想在templete视图中向用户显示一个
TokenViewModel对象
,该对象有两个属性,
TokenDate
TokenString
@user.Identity.GetLastUserToken()检索.TokenString
在视图中

我就这么做

public static class ApplicationIdentityExtensions
{
    public static string FindFirstValue(this ClaimsIdentity identity, string claimType)
    {
        return null;
    }

    public static TokenViewModel GetLastUserToken(this IIdentity identity)
    {
        return new TokenViewModel(){ TokenDate = DateTime.Now, TokenString= "Token from Mock" };
    }

}
正如您所看到的,
EmailTokenProvider
中的
manager.registerWofactorProvider(“EmailCode”,新的EmailTokenProvider()
行由
IUserTokenProvider
继承,我在项目中自行实现

要实现这些方法,必须继承以下内容:

    public Task<bool> ValidateAsync(string purpose, string token, UserManager<Usuario, int> manager, Usuario user)
    {
        //TODO: I guess, must to validate user custom token here using my _respositoryToken.

我该怎么做呢?我在这里找到了解决方案

只需实现以下代码:

var prinicpal = (ClaimsPrincipal)Thread.CurrentPrincipal;
var lasttoken = prinicpal.Claims.Where(c => c.Type == ClaimTypes.UserData).Select(c => c.Value).SingleOrDefault();
见:

var prinicpal = (ClaimsPrincipal)Thread.CurrentPrincipal;
var lasttoken = prinicpal.Claims.Where(c => c.Type == ClaimTypes.UserData).Select(c => c.Value).SingleOrDefault();
public static TokenViewModel GetLastUserToken(this IIdentity identity)
{
    var prinicpal = (ClaimsPrincipal)Thread.CurrentPrincipal;
    return prinicpal.Claims.Where(c => c.Type == ClaimTypes.UserData).Select(c => c.Value).Select(i => new TokenViewModel{ TokenValue = i }).SingleOrDefault();
}