0

ユーザー名とパスワードをクリアテキストで作成して保存しようとしています。私はいかなる種類の認証も行っていません (ノードパスポートを使用してこれを実行し、暗号化できることは知っていますが、javascript を学習しているだけなので、いじってみました)

次のようにグローバルに定義したオブジェクトがあります。

var obj= {username: req.body.username,
          password: req.body.password}

私は自分の registeredUsers 配列にプッシュしています:

var registeredUsers = new Array();

私の問題は、次のようなことができるようにしたいということです:

   if((($.inArray(username, registerdUsers) == username && 
($.inArray(password, registerdUsers)) == password){     
    res.redirect("/?error=Already Registered"); 
    }

これは機能しません。オブジェクトの両方の値をチェックして、それらが配列に含まれているかどうかを確認するにはどうすればよいですか?

誰かが興味を持っている場合に備えて、私が認証を行っている機能は次のとおりです。

function ensureAuthentication(req, res, next){
    //push object onto the registeredUsers array
    registeredUsers.push(obj);
    //if the user is already registered, throw error
    if (($.inArray(username, registeredUsers) && ($.inArray(password, registeredUsers)) {//obj.contains() username){
        res.redirect("/?error=Already Registered"); 
    }
    //if new user
    else{
        authentication.push(obj);
        console.log("added new user);
        //redirect to homepage
        res.rediret("/");
    }
}

function login(req, res) {
    //var username = req.body.username;
    req.session.username = username;
    req.session.password = password;
    loggedInUsers[username] = LoggedIn;
    if((($.inArray(username, registerdUsers) == username && ($.inArray(password, registerdUsers)) == password){
        //increase login count
        for(users in loggedInUsers){
            ++loginCount;
            console.log("Login Count: ", loginCount);
        }
        //redirect to login page
        res.redirect("/users")
    }
    else{
        //print out error message
        res.redirect("/?error=Error: incorrect username/password");
    }
}
4

2 に答える 2

1

$.inArray は、obj が配列内にある場合は位置のインデックスを返し、それ以外の場合は -1 を返す Java の indexOf 関数に似ています。

だから何か..

if((($.inArray(username, registerdUsers) !== -1 && 
($.inArray(password, registerdUsers)) !== -1){     
    res.redirect("/?error=Already Registered"); 
}

..まったく同じパスワードを持つ重複ユーザーがいないことを確認しますが、重複ユーザーは許可します。

私はあなたがのようなものを探していると思います..

if($.inArray(username, registeredUsers) !== -1){     
    res.redirect("/?error=Already Registered"); 
}

つまり、ユーザー名が registeredUsers 配列に存在する場合、エラーメッセージ 'Already Registered' が表示されます

于 2013-10-14T21:29:44.903 に答える
1

ユーザー名でオブジェクトを検索します。

var user;

for(var i = 0; user = registeredUsers[i]; i++) {
    if(user.username === username)
        break;
}

パスワードを確認します。

var valid = user && user.password === password;
于 2013-10-14T21:14:13.577 に答える