我有以下代码可确保电子邮件验证令牌的令牌生存期跨度在14天后过期: -
if (Startup.DataProtectionProvider != null)
{
IDataProtector dataProtector = Startup.DataProtectionProvider.Create("ASP.NET Identity");
this.UserTokenProvider = new DataProtectorTokenProvider<IdentityUser, Guid>(dataProtector)
{
TokenLifespan = TimeSpan.FromDays(14)
};
}
在我的应用的不同区域,我通过调用ASP.Identity ApplicationUserManager的GenerateChangePhoneNumberTokenAsync(userId,phoneNumber)方法来使用手机号码令牌。
问题是移动令牌在15分钟后即将到期。
如何更改移动令牌的生命周期?
答案 0 :(得分:2)
您需要覆盖
Microsoft.AspNet.Identity.UserManager.GenerateChangePhoneNumberTokenAsync
要执行此操作,请查看here和here 如何首先扩展UserManager。
在 GenerateChangePhoneNumberTokenAsync 中,您需要使用自定义 Rfc6238AuthenticationService ,该使用 timeStep 参数调用 GenerateCode p>
GenerateChangePhoneNumberTokenAsync将如下所示
public class ApplicationUserManager : UserManager<YourIdentityUser, int>
{
public ApplicationUserManager(IUserSecurityStampStore<YourIdentityUser, Guid> store)
: base(store)
{
}
// *** some other code
public override async Task<string> GenerateChangePhoneNumberTokenAsync(Guid userId, string phoneNumber)
{
var user = await FindByIdAsync(userId);
var code = CustomRfc6238AuthenticationService.GenerateCode(user.SecurityStamp, phoneNumber, "optional modifier", TimeSpan.FromDays(14));
return code;
}
}
可以找到自定义 Rfc6238AuthenticationService 的示例实现here
答案 1 :(得分:0)
如果您不想覆盖UserManager
类,则始终可以在创建后获取令牌并手动调整ExpirationDate
。例如,我们在电子邮件发送逻辑中执行此操作(如果您重新发送电子邮件,则始终将令牌刷新24小时):
// Token already created
UserToken userToken = db.UserTokens.Where(t => t.UserId == user.Id && f.IsActive).FirstOrDefault();
userToken.ExpirationDate = DateTime.Now.AddHours(24);