asp.net 获取会员用户未认证时的用户名(重置密码)

asp.net get username of membership user when they are unauthenticated (reset password)

我正在尝试为 ASP.Net 会员中的应用程序实施重置密码功能。

为了获取用户以便重新设置密码:

var user = Membership.GetUser(userNameFromSql, false);

但是,此方法仅在用户通过身份验证时有效。如果用户想要重置密码的原因是他们无法登录,那么这一点就没有意义了?因此,当用户未通过身份验证时,我正在寻找一种替代方法来获取会员用户名。

我的重设密码功能如下。进行 SQL 查询以从数据库中检索用户名,存储为 userNameFromSql。

var user = Membership.GetUser(userNameFromSql, false);
string newPassword = txtNewPassword.Text;

if ((newPassword.Length >= Membership.MinRequiredPasswordLength) &&
    (newPassword.ToCharArray().Count(c => !Char.IsLetterOrDigit(c)) >=
            Membership.MinRequiredNonAlphanumericCharacters) &&
    ((Membership.PasswordStrengthRegularExpression.Length == 0) ||
            Regex.IsMatch(newPassword, Membership.PasswordStrengthRegularExpression)))
{
    user.ChangePassword(user.ResetPassword(), newPassword);
    lblMessage.Text = "Password Changed Successfully!";
    return true;
}

该页面作为来自电子邮件 link 的重定向访问,其中包含用于密码重置的 GUID。因此,该页面已通过验证,数据库中的用户名也是合法的(即数据库中存在请求更改密码的有效用户),但我无法将此用户传递给 Membership.GetUser() 方法当用户未通过身份验证时,它总是 returns NULL。

我该如何进行?我希望这是足够的信息?或者,我可以通过使用

对 aspnetdb 数据库(其中包含成员用户)进行更新查询来手动重置用户密码吗?
crypto.hashPassword(string)

但是哈希方法必须和Membership自己的哈希方法一样,否则就不能再次找回密码了?

非常感谢

我用这个函数来做到这一点,也许它可以帮助你:

    public bool ChangePassword(string userId, string newPassword)
        {
            _userManager.UserValidator = new UserValidator<IdentityUser>(_userManager) { AllowOnlyAlphanumericUserNames = false };
            var identityUser = _userManager.FindById(userId);
            identityUser.PasswordHash = _userManager.PasswordHasher.HashPassword(newPassword);
            var result = _userManager.Update(identityUser);
            return true;

        }

Membership.GetUser(userNameFromSql, false) 应该有效,实际上 Membership.GetUser(userNameFromSql) 应该足够了。如果是 returns null 那么你的 userNameFromSql 是错误的。