asp.net - 身份框架测试确认电子邮件 token 是否已过期

标签 asp.net asp.net-mvc asp.net-identity email-confirmation

是否可以使用 Identity Framework 的 UserManager 测试确认电子邮件 token 是否过期?不管是什么错误,从以下几点来看:

var result = await UserManager.ConfirmEmailAsync(userId, code);

我收到一般性的“无效 token ”错误。

最佳答案

我找到了一种方法来解析 token 的颁发日期,然后您可以检查该日期是否在允许的时间跨度内(如果未指定,则默认为 24​​ 小时)。

身份.cs

应用程序用户管理器

public IDataProtector Protector { get; set; }

public TimeSpan TokenLifespan { get; set; }

ApplicationUserManager Create()

// Explicitly set token expiration to 24 hours. 
manager.TokenLifespan = TimeSpan.FromHours(24);
var dataProtectionProvider = options.DataProtectionProvider;
manager.Protector = dataProtectionProvider.Create("ASP.NET Identity");

if (dataProtectionProvider != null)
{
    manager.UserTokenProvider =
        new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"))
        {
            TokenLifespan = manager.TokenLifespan
        };
}

AccountController.cs

public async Task<ActionResult> ConfirmEmail(string Code, string UserId)
{
// Try/catch, validation, etc.
var tokenExpired = false;
var unprotectedData = UserManager.Protector.Unprotect(Convert.FromBase64String(Code));
var ms = new MemoryStream(unprotectedData);
using (BinaryReader reader = new BinaryReader(ms))
{
    var creationTime = new DateTimeOffset(reader.ReadInt64(), TimeSpan.Zero);
    var expirationTime = creationTime + UserManager.TokenLifespan;
    if (expirationTime < DateTimeOffset.UtcNow)
    {
        tokenExpired = true;
    }
 }
 // Do something if token is expired, else continue with confirmation
}

我找到了this blog post Nkosi 的回答非常有帮助,如果您想查看 Identity 源代码,Microsoft 有它 here (MVC5 及更低版本的 Identity 的早期版本 here )。另外,如果回答您自己悬赏的问题的形式不佳,我深表歉意,但我忍不住继续寻找更好的解决方案。

关于asp.net - 身份框架测试确认电子邮件 token 是否已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42971556/

相关文章:

asp.net-identity - ASP.NET Identity 如何在 cookie 中往返自定义声明而不将其添加到数据存储区?

c# - 为什么标签的值(value)改变了?

c# - 返回未经授权的 ViewResult

Asp.Net 身份 2.0 : The entity type User is not part of the model for the current context

asp.net-mvc - ASP.NET MVC AjaxHelper 是否处理降级?

asp.net - 编写 WebForms 或 MVC 以外的 ASP.NET 框架?

c# - Asp.net mvc identity SecurityStamp 无处不在注销

c# - 在gridview中显示数据

c# - SqlDataReader 超出范围错误

c# - 最佳实践,1 种方法和 2 种方法具有相同的功能