gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:54:32 37 4
gpt4 key购买 nike

是否可以使用 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/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com