ASP.Net Identity 2 使用短信重置密码

Posted

技术标签:

【中文标题】ASP.Net Identity 2 使用短信重置密码【英文标题】:ASP.Net Identity 2 Reset password with SMS 【发布时间】:2014-07-22 07:31:05 【问题描述】:

我希望在重置密码时向用户发送短信。我已经具备发送 SMS 的功能,我只需要有关如何使用 Identity 2.0 进行设置的指南。我似乎在网上找不到任何有用的信息,参考代码本身也没有正确注释。

我想生成一个安全码,将其发送给用户,然后他必须将其输入到表单中,然后才能重置他/她的密码。谁能指导我查看解释此过程的指南/教程?

【问题讨论】:

查看“双因素身份验证”。默认模板在“IdentityConfig.cs”中注册了两个提供者 他说的是重置密码,而不是两因素身份验证。生成的用于重置密码的令牌太长,无法要求用户输入。到目前为止,我发现的任何教程或模板中都没有显示使用短信重置密码的过程。 【参考方案1】:

在挖掘身份源代码后,我找到了一个替代令牌提供者,它可以生成类似于电话号码确认(六位数)的令牌。

我必须在我的 UserManager 中实现两个方法来生成代码,然后对其进行验证。

我在 UserManager 中声明了令牌提供者

private TotpSecurityStampBasedTokenProvider<User, string> smsResetTokenProvider = new TotpSecurityStampBasedTokenProvider<User, string>();

这是第一种生成代码的方法:

public async Task<string> GenerateSMSPasswordResetToken(string userId)
    
        var user = await base.FindByIdAsync(userId);
        var token = await smsResetTokenProvider.GenerateAsync("Reset Password", this, user);
        return token;
    

这是验证代码的第二种方法:

public async Task<IdentityResult> SMSPasswordResetAsync(string userId, string token, string newPassword)
    
        var user = await base.FindByIdAsync(userId);
        var valid = await smsResetTokenProvider.ValidateAsync("Reset Password", token, this, user);
        if (valid)
        
            var passwordStore = Store as IUserPasswordStore<User, string>;

            var result = await UpdatePassword(passwordStore, user, newPassword);
            if (!result.Succeeded)
            
                return result;
            
            return await UpdateAsync(user);
        
        else
        
            return IdentityResult.Failed("InvalidToken");
        
    

您可能需要根据您的用户管理器调整代码

【讨论】:

你能看看我的问题吗:https://***.com/questions/44243574/how-use-totpsecuritystampbasedtokenprovider-in-asp-net-identity-4 您对这个问题的回答是最准确的,但我在尝试激活控制器时遇到了这个异常:Unable to resolve service for type 'Microsoft.AspNetCore.Identity.TotpSecurityStampBasedTokenProvider1`。我的实现是:private readonly TotpSecurityStampBasedTokenProvider&lt;ApplicationUser&gt; _smsProvider;

以上是关于ASP.Net Identity 2 使用短信重置密码的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Identity 重置密码

ASP.NET Identity 重置密码

ASP.NET CORE Identity DataProtectionTokenProviderOptions 密码重置令牌无效

快速掌握 ASP.NET 身份认证框架 Identity - 通过邮件重置密码

ASP.NET Core Identity - 使令牌(电子邮件确认、密码重置等)在不同服务器上有效?

ASP.NET Identity 注销另一个用户