2013-10-14 4 views
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"); 
    } 
} 
+0

'inArray' возвращает number, что это должно делать '$ .inArray (username, registerdUsers) == username' – elclanrs

+0

Что это за' '' вещь? – Ryan

+0

@minitech, я подозреваю lodash или подчеркивание –

ответ

1

Найти объект по имени пользователя:

var user; 

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

Проверьте пароль:

var valid = user && user.password === password; 
1

$ .inArray подобна функции IndexOf Java, который возвращает индекс позиции, если OBJ находится в массиве, в противном случае -1

Так что-то вроде ..

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

..would проверка чтобы убедиться, что у вас нет дублированных пользователей с одинаковым паролем, но разрешите дублировать пользователей.

Я думаю, что вы ищете что-то вроде ..

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

, который говорит, если имя пользователя существует в массиве registeredUsers, затем дать Сообщ ошибке «Уже Registered»

+0

Я должен был сказать, что я использую javascript на стороне сервера, а не на стороне клиента, поэтому я не могу использовать $ notation ... но это определенно помогло мне лучше понять, спасибо! – Sarah

Смежные вопросы