ASP.Net Identity 2使用SMS重置密码

Swi*_*fty 10 asp.net-mvc-5 asp.net-identity asp.net-identity-2

我想在重置密码时向用户发送短信.我已经有了发送短信的工具,我只需要一个如何使用Identity 2.0进行设置的指南.我似乎无法在线找到任何有用的信息,参考代码本身也没有正确评论.

我想生成一个安全代码,将其发送给用户,然后他必须将其输入表单然后被允许重置他/她的密码.任何人都可以指导我解释这个过程的指南/教程吗?

Sou*_*bes 5

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

我必须在我的 UserManager 中实现两个方法来生成代码然后验证它。

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

private TotpSecurityStampBasedTokenProvider<User, string> smsResetTokenProvider = new TotpSecurityStampBasedTokenProvider<User, string>();
Run Code Online (Sandbox Code Playgroud)

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

public async Task<string> GenerateSMSPasswordResetToken(string userId)
    {
        var user = await base.FindByIdAsync(userId);
        var token = await smsResetTokenProvider.GenerateAsync("Reset Password", this, user);
        return token;
    }
Run Code Online (Sandbox Code Playgroud)

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

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");
        }
    }
Run Code Online (Sandbox Code Playgroud)

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