我正在尝试使用Razor对名为users(包含一个id(int) username(nchar(10)
)和password(char(32)
)的表进行非常简单的用户名和密码验证,但我遇到了这个错误:
Operator '==' cannot be applied to operands of type 'WebMatrix.Data.DynamicRecord' and 'HasherMD5Main'
我创建了一个执行md5哈希(HasherMD5Main
)的.cs类,它返回作为字符串传递的值(请不要对安全性进行评论,这不会进入任何生产环境)并且我正在哈希输入的密码,然后在数据库中进行查找。
@{// 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>
关于如何简单验证我的应用程序出现的哈希密码是否与存储在数据库中的哈希相匹配的任何想法?
答案 0 :(得分:0)
产生错误的行是:
if(passwordquery == hash)
hash是您自定义的Md5 hasher实例
var hash = new HasherMD5Main(enteredpassword);
而passwordquery是数据库查询WebMatrix.Data.DynamicRecord
的结果集var passwordquery = db.QuerySingle(“SELECT password FROM users WHERE username = @ 0”,enteredusername);
你想要做的是让你的MD5哈希计算哈希值,然后将它与你可以从结果集中提取的结果值进行比较。
答案 1 :(得分:0)
if(passwordquery == hash) 是发生错误的地方。
当你比较某些东西时,最终应该在比较之前将它们归结为相同的类型。
此致 Pavan.G