首页 > 解决方案 > 在 code.org 中与登录系统混淆的错误

问题描述

我正在使用 code.org 制作一个小应用程序,但是,我的应用程序需要登录。创建登录时,我希望它检查以确保数据库中不存在用户的输入。我不希望多个人使用相同的用户名。当我在数据库中只有一个帐户时,它工作得很好。但是当有多个时,它就不再正确地工作了。它确实检查用户的输入是否与数据库中的用户名相同,它确实告诉用户这是一个无效的用户名,但无论如何它会将它们发送到下一个屏幕并保存用户输入的用户名和密码进入数据库。

这是我所拥有的(我使用自己的函数,alert因为 code.org 不允许使用该alert函数。)

// Alert function
function Alert(text,time) {
  if(text != undefined) {
    textLabel("ALERT",text);
    setProperty("ALERT","background-color","black");
    setProperty("ALERT","text-color","white");
    if(time != undefined) {
      setTimeout(function() {
        deleteElement("ALERT");
      },time);
    }
  }else{
    console.log("WARNING: \"Alert()\" -> \"text\" is undefined.");
  }
}

// create account button
onEvent("create-account-bt","click",function() {
  readRecords("players",{},function(record) {
    for(var i = 0 ; i < record.length ; i++) {
      if(getText("new-username-input") != record[i].username) {
        if(getText("new-passcode-input") != "") {
          createRecord("players",{
            username:getText("new-username-input"),
            passcode:getText("new-passcode-input")
          },function() {
            setScreen("login-screen");
          });  
        }else{
          Alert("Incorrect passcode or username",1200);
        }
      }else{
        Alert("Incorrect passcode or username",1200);
      }
    }
  });
});

很长一段时间以来,我一直试图弄清楚这一点。我真的很感激任何帮助,即使它没有完全解决它。

标签: javascriptcode.org

解决方案


你的方法是错误的。当你想确保没有重复时,你必须遍历整个数据库。如果您在浏览时发现匹配项,请提醒并停止。但只有在最后找不到匹配项时,才添加条目。

一旦没有匹配项,您当前的代码就会添加新条目。所以几乎总是直接用第一个条目。即使它找到与第一个条目的匹配项,它也会发出警报,但会继续循环,因为您不调用break.

试试这种方式:

onEvent("create-account-bt","click",function() {
  readRecords("players",{},function(record) {

    var matchFound = false;

    for(var i = 0 ; i < record.length ; i++) {

      if((getText("new-username-input") == record[i].username) || 
         (getText("new-passcode-input") == "")) 
      {
        Alert("Incorrect passcode or username",1200);
        matchFound = true;
        break;
      }

    }

    if(!matchFound) {
        createRecord("players",{
            username:getText("new-username-input"),
            passcode:getText("new-passcode-input")
        },function() {
            setScreen("login-screen");
        });    
    }

  });
});

推荐阅读