我正在尝试验证由管理员注册的登录用户,默认情况下,为用户提供LoginID
和密码@password
和LoginCount
为0 。如果用户最终登录并更新了它的哈希密码,则loginCount更新为1。-请参见下图。
所以我试图在用户首次登录时执行多个if语句,它应该检查字符串密码
if (loginCount < 1 && password == "@password") {
,如果用户已经登录,则应使用具有密码的类来检查散列密码
if(loginCount > 0 && PasswordHasher.Verify(password, hashed))
所有这些操作都是在使用LoginID从数据库中过滤掉用户之后完成的
select * from cor_usersetup where LoginID = @LoginID
但无法正常工作...
public bool GetAuthentication(string loginId, string password) {
var connection = System.Configuration.ConfigurationManager.ConnectionStrings["FCoreDBConnection"].ConnectionString;
SqlConnection cn = new SqlConnection(connection);
string sql = "select * from cor_usersetup where LoginID = @LoginID"; // and Password = @Password
SqlCommand cmd = new SqlCommand(sql,cn);
cmd.Parameters.AddWithValue("@LoginID", loginId);
cn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
int counter = 0;
while (rdr.Read()) {
var hashed = rdr["Password"].ToString().Trim();
var loginCount = int.Parse(rdr["LoginCount"].ToString());
if (loginCount < 1 && password == "@password") { //if the user hasnt changed his/her password yet......
counter = counter + 1;
}
if(loginCount > 0 && PasswordHasher.Verify(password, hashed)) { //after password confirmation..
counter = counter + 1;
}
}
rdr.Close();
cn.Close();
if (counter != 0) {
success = true;
}
return success;
}
我设置的断点参考下图,但未触及if语句
请有人能帮助我告诉我我出了什么问题吗...如果我将if条件正确放置在正确的位置,请提前致谢。
答案 0 :(得分:-1)
首先,请检查“异常窗口”(Ctrl + Alt + E),并设置所有异常(如果没有抛出)。然后再次调试。 您的
int.Parse(rdr["LoginCount"]
引发ArgumentException。实际上,您可以使用
bool isConvertable = int.TryParse(rdr["LoginCount"], out int loginCount);
if (!isConvertable)
Console.WriteLine(rdr["LoginCount"]); //To see what you got
if (loginCount < 1 && password == "@password") {
counter = counter + 1;
}
代替int.Parse或添加try / catch块