【问题标题】:asp.net get username of membership user when they are unauthenticated (reset password)asp.net 在未经身份验证时获取会员用户的用户名(重置密码)
【发布时间】:2019-04-15 03:25:41
【问题描述】:

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

为了让用户重新设置密码:

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;
}

该页面作为来自包含密码重置 GUID 的电子邮件链接的重定向访问。因此该页面得到验证,数据库中的用户名也是合法的(即数据库中存在一个请求更改密码的有效用户),但我不能像往常一样将此用户传递给 Membership.GetUser() 方法用户未通过身份验证时返回 NULL。

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

对 aspnetdb 数据库(保存会员用户)进行更新查询来手动重置用户密码吗?
crypto.hashPassword(string)

但是散列方法必须与会员自己的散列方法相同,否则将无法再次检索密码?

非常感谢

【问题讨论】:

    标签: c# asp.net asp.net-membership membership-provider


    【解决方案1】:

    Membership.GetUser(userNameFromSql, false) 应该可以工作,实际上Membership.GetUser(userNameFromSql) 应该足够了。如果它返回null,那么你的userNameFromSql 是错误的。

    【讨论】:

    • 原来在forums.asp.net/t/… 接受的答案是错误的?正在创建的用户未正确存储在数据库中,这就是 GetUser() 返回 NULL 的原因。非常感谢您的帮助!
    【解决方案2】:

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

        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;
    
            }
    

    【讨论】:

      猜你喜欢
      • 2013-05-31
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多