0

Razorを使用してusers(containinig an id(int) username(nchar(10))および)というテーブルに対して非常に単純なユーザー名とパスワードの検証を行おうとしていますが、次のエラーが発生しています。password(char(32)

Operator '==' cannot be applied to operands of type 'WebMatrix.Data.DynamicRecord' and 'HasherMD5Main'

文字列として渡された値を返すmd5ハッシュ()を実行する.csクラスを作成しHasherMD5Main(セキュリティに関するコメントはありません。これは本番環境には適用されません)、入力したパスワードをハッシュしてからルックアップを実行します。データベース内。

コード

@{// 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>

私のアプリが思いついたハッシュパスワードがデータベースに保存されているハッシュと一致するかどうかを簡単に検証する方法についてのアイデアはありますか?

4

2 に答える 2

0

if(passwordquery == hash)は、エラーが発生した場所です。

あなたが何かを比較するとき、比較する前に両方が最終的に同じタイプに煮詰められるべきです。

よろしく、Pavan.G

于 2012-12-03T09:05:55.487 に答える
0

エラーを生成する行は次のとおりです。

if(passwordquery == hash)

ハッシュはカスタムMd5ハッシュインスタンスです

var hash = new HasherMD5Main(enteredpassword);

passwordqueryは、データベースクエリWebMatrix.Data.DynamicRecordからの結果セットです。

var passwordquery = db.QuerySingle( "SELECT password FROM users WHERE username = @ 0"、enteredusername);

あなたがしたいのは、MD5ハッシャーにハッシュを計算させ、それを結果セットから抽出できる結果値と比較することです。

于 2012-12-03T07:22:12.547 に答える