Ste*_*eve 4 c# membership asp.net-membership membership-provider
我非常接近完成这个项目.我需要从我的Membership表中检索密码和passwordSalt,以将其与我的'OldPasswords'表进行比较.
问题是成员资格提供程序不允许我使用GetPassword方法,因为密码是经过哈希处理的.
我无法在正常的sqlConnection中检索它,因为UserID也被哈希处理.
有谁知道如何散列UserID所以我可以把它放在我的where子句中?
或者可能有不同的方式来获取这些数据?
任何帮助表示赞赏.
谢谢,
史蒂夫
Steve,UserId没有哈希.您可能会将UserName与作为Guid的UserId(ProviderUserKey)混淆.
在您的其他问题的上下文中:您应该在用于创建新用户的代码中引用此代码,以便在OnPasswordChanging中记录初始密码哈希,salt和格式AND,以便您可以检查/拒绝/插入.
这将获得当前登录用户的相关信息:
var user = Membership.GetUser();
var userId = user.ProviderUserKey;
MembershipPasswordFormat passwordFormat;
string passwordSalt;
string password;
var cstring = WebConfigurationManager.ConnectionStrings["localSqlServer"];
using (var conn = new SqlConnection(cstring.ConnectionString))
{
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "select PasswordFormat,PasswordSalt,Password from aspnet_Membership where UserId=@UserId";
cmd.Parameters.AddWithValue("@UserId", userId);
conn.Open();
using (var rdr = cmd.ExecuteReader())
{
if (rdr != null && rdr.Read())
{
passwordFormat = (MembershipPasswordFormat) rdr.GetInt32(0);
passwordSalt = rdr.GetString(1);
password = rdr.GetString(2);
}
else
{
throw new Exception("An unhandled exception of type 'DoesntWorkException' has occured");
}
}
}
}
//do something interesting hew with passwordFormat, passwordSalt , password
Run Code Online (Sandbox Code Playgroud)