我正在使用一个对象检索数据库的内容(它只返回一个字段),然后将它与一个用SHA1进行过哈希处理的字符串进行比较。代码如下:
protected void Onbutton_click_login(object sender, System.EventArgs e)
{
var dbcontext = new PrepLicensingSolution2010.DAL.LicensingEntities1();
var user = dbcontext.getloginname(loginName.Text);
string HashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(Password.Text, "sha1");
if (user.ToString() == HashedPassword)
{
Response.Redirect("faqs.aspx");
}
else
{
Response.Redirect("Default.aspx");
}
}
我在流程的每个阶段放置断点并检查数据,对象结果集和字符串中的数据是相同的,但即使这样,条件如果失败
有趣的是,被比较的类型都是字符串类型和相同值,所以为什么重定向会转到default.aspx页面。
图像包含断点的数据
任何输入都会很棒。
由于
答案 0 :(得分:2)
根据屏幕截图,user.ToString()
看起来要返回字符串{System.Data.Objects.ObjectResult<string>}
。当然,这与散列密码不相等。
您的问题是getloginname
调用的结果是包含单个字符串的字符串序列,而不是单个字符串本身。 ToString()
的默认实现只返回类名,您可以在屏幕截图中“user”行的Value列中看到它。将条件语句更改为以下语句应该解决它:
if (user.FirstOrDefault() == HashedPassword)