Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp标识2-更改移动令牌的到期时间_C#_Asp.net_Asp.net Identity_Token - Fatal编程技术网

C# Asp标识2-更改移动令牌的到期时间

C# Asp标识2-更改移动令牌的到期时间,c#,asp.net,asp.net-identity,token,C#,Asp.net,Asp.net Identity,Token,我有以下代码确保电子邮件验证令牌的令牌生存期在14天后过期:- if (Startup.DataProtectionProvider != null) { IDataProtector dataProtector = Startup.DataProtectionProvider.Create("ASP.NET Identity"); this.UserTokenProvider = new DataProt

我有以下代码确保电子邮件验证令牌的令牌生存期在14天后过期:-

if (Startup.DataProtectionProvider != null)
            {
                IDataProtector dataProtector = Startup.DataProtectionProvider.Create("ASP.NET Identity");

                this.UserTokenProvider = new DataProtectorTokenProvider<IdentityUser, Guid>(dataProtector)
                {
                    TokenLifespan = TimeSpan.FromDays(14)
                };
            }
if(Startup.DataProtectionProvider!=null)
{
IDataProtector dataProtector=Startup.DataProtectionProvider.Create(“ASP.NET标识”);
this.UserTokenProvider=新的DataProtectorTokenProvider(dataProtector)
{
令牌寿命=时间跨度。从天(14)
};
}
在我的应用程序的另一个区域中,我通过调用ASP.Identity ApplicationUserManager的GenerateChangePhoneNumberTokenAsync(用户标识,电话号码)方法来使用手机号码令牌

问题是移动代币在15分钟后到期

如何更改移动令牌的生存期?

您需要覆盖

Microsoft.AspNet.Identity.UserManager.GenerateChangePhoneNumberTokenAsync
要这样做,请看一看并 如何首先扩展UserManager

在GenerateChangePhoneNumberTokenAsync中,您需要使用一个自定义Rfc6238AuthenticationService,该服务使用timeStep参数调用GenerateCode

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;
    }
}
公共类应用程序管理员:用户管理员
{
公共应用程序服务器管理器(IUserSecurityStampStore存储)
:基地(商店)
{
}
//***其他一些代码
公共重写异步任务GenerateChangePhoneNumberTokenAsync(Guid用户ID,字符串phoneNumber)
{
var user=wait FindByIdAsync(userId);
var code=CustomRfc6238AuthenticationService.GenerateCode(user.SecurityStamp,phoneNumber,“可选修饰符”,TimeSpan.FromDays(14));
返回码;
}
}
可以找到定制Rfc6238AuthenticationService的示例实现

,您需要覆盖它

Microsoft.AspNet.Identity.UserManager.GenerateChangePhoneNumberTokenAsync
要这样做,请看一看并 如何首先扩展UserManager

在GenerateChangePhoneNumberTokenAsync中,您需要使用一个自定义Rfc6238AuthenticationService,该服务使用timeStep参数调用GenerateCode

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;
    }
}
公共类应用程序管理员:用户管理员
{
公共应用程序服务器管理器(IUserSecurityStampStore存储)
:基地(商店)
{
}
//***其他一些代码
公共重写异步任务GenerateChangePhoneNumberTokenAsync(Guid用户ID,字符串phoneNumber)
{
var user=wait FindByIdAsync(userId);
var code=CustomRfc6238AuthenticationService.GenerateCode(user.SecurityStamp,phoneNumber,“可选修饰符”,TimeSpan.FromDays(14));
返回码;
}
}

可以找到自定义Rfc6238AuthenticationService的示例实现

如果您不想覆盖
UserManager
类,您可以在创建后随时获取令牌并手动调整
到期日期。例如,我们在电子邮件发送逻辑中执行此操作(如果重新发送电子邮件,请始终刷新令牌24小时):


如果您不想覆盖
UserManager
类,您可以在创建令牌后随时获取该令牌,并手动调整
ExpirationDate
。例如,我们在电子邮件发送逻辑中执行此操作(如果重新发送电子邮件,请始终刷新令牌24小时):