【发布时间】: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