【发布时间】:2012-11-20 14:45:54
【问题描述】:
我正在尝试使用 Razor 对名为 users 的表(包含 id(int) username(nchar(10))和 password(char(32) 进行非常简单的用户名和密码验证,但我遇到了这个错误:
Operator '==' cannot be applied to operands of type 'WebMatrix.Data.DynamicRecord' and 'HasherMD5Main'
我创建了一个 .cs 类,它执行 md5 哈希 (HasherMD5Main),它返回作为字符串传递的值(请不要在安全方面使用 cmets,这不会进入任何生产环境)并且我正在对输入的内容进行哈希处理密码,然后在数据库中查找。
代码
@{// Initialize page
var enteredusername = "";
var enteredpassword = "";
var ErrorMessage = "";
// If this is a POST request, validate and process data
if( IsPost ) {
enteredusername = Request.Form["enteredusername"];
enteredpassword = Request.Form["enteredpassword"];
var hash = new HasherMD5Main( enteredpassword );
if( enteredusername.IsEmpty() || enteredpassword.IsEmpty() ) {
ErrorMessage = "You must specify a username and password.";
}
else {
var db = Database.Open( "MyConnectionString" );
var passwordquery = db.QuerySingle( "SELECT password FROM users WHERE username = @0", enteredusername );
if( passwordquery == hash ) {
Response.Redirect( "/Success" );
}
else {
Response.Redirect( "/Failure" );
}
}
}
}
@if( ErrorMessage != "" ) {
<p>@ErrorMessage</p>
<p>Please correct the errors and try again.</p>
}
<form method="post" action="">
<fieldset>
<legend>Log In to Your Account</legend>
<ol>
<li>
<label>Username:</label>
<input type="text" id="enteredusername" name="enteredusername" />
</li>
<li>
<label>Password:</label>
<input type="password" id="enteredpassword" name="enteredpassword" />
</li>
<li>
<p>
<input type="submit" value="login" /></p>
</li>
</ol>
</fieldset>
</form>
关于如何简单地验证我的应用提供的散列密码是否与存储在数据库中的散列匹配的任何想法?
【问题讨论】:
-
通过 ToString() 将它们都转换为字符串
-
问:没有缩进是怎么回事?是不是弄乱了你的格式,或者你真的像那样格式化你的代码?
-
@Arsalan 你介意给我一个在我的变量上使用 ToString 的例子吗?我得到一个方法重载错误
-
@sputn1ck 你能摆脱 var 并保持它们的实际类型吗?如果你不知道类型是什么,你可以调试它,当你悬停变量时,它会显示类型!
-
@Arsalan 我不认为我有能力在 WebMatrix 中进行调试(也许在 VS 中我会)我尝试了这个,但我无法让它匹配(没有抛出错误) if (Convert.ToString(passwordquery) == Convert.ToString(hash))