【问题标题】:How to verify objects in an array?如何验证数组中的对象?
【发布时间】:2013-10-22 13:23:05
【问题描述】:

我正在尝试以明文形式制作和存储用户名和密码。我没有进行任何类型的身份验证(我知道我可以使用节点护照来执行此操作并进行加密,但我只是在学习 javascript,所以我只是想玩玩)

我有一个像这样全局定义的对象:

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

我正在推送到我的注册用户数组:

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");
    }
}

【问题讨论】:

  • inArray 返回一个数字,这是做什么的$.inArray(username, registerdUsers) == username
  • $ 是什么东西?
  • @minitech,我怀疑 lodash 或下划线
  • 我想看看输入的密码是不是用户名的正确密码
  • 在函数login中,特别是req.session.username = username;用户名和密码在哪里定义?

标签: javascript arrays node.js object


【解决方案1】:

通过用户名查找对象:

var user;

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

检查密码:

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

【讨论】:

    【解决方案2】:

    $.inArray 类似于 Java 的 indexOf 函数,如果 obj 在数组中,则返回位置的索引,否则返回 -1

    有点像..

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

    ..将检查以确保您没有任何重复用户使用完全相同的密码,但允许重复用户。

    我认为您正在寻找类似的东西..

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

    如果用户名存在于已注册用户数组中,则给出错误消息“已注册”

    【讨论】:

    • 我应该说我使用的是服务器端 JavaScript,而不是客户端,所以我不能使用 $ 表示法......但它确实帮助我更好地理解,谢谢!跨度>
    猜你喜欢
    • 2021-05-18
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    相关资源
    最近更新 更多