用户名和密码验证始终返回true(使用firebase)

时间:2017-10-18 14:55:59

标签: javascript firebase-realtime-database vuejs2

我目前正在使用firebase处理我的Vue.js项目中的用户名验证或唯一性。

我的方法是这样的。首先,我使用vue-resource将所有已注册/已保存的用户存储在created挂钩下的数组中:



//RETRIEVE REGISTERED TAILORS
    this.$http.get('https://nots-76611.firebaseio.com/tailors.json').then(function(data){
      return data.json();
    }).then(function(data){
      var usersArray = [];
      for (let key in data){
          data[key].id = key;
          usersArray.push(data[key]);
      }
      this.regTailors = usersArray;
    });




该数组将包含两个用户,其用户名为 dyalibidyalibi marantzmarantz ,密码 dyalibidyalibi marantzmarantz 连续(用户名和密码相同)。

然后,在computed属性下,我遍历数组并检查当前输入的密码或用户名的NEITHER是否与数组中的某个用户匹配。如果是这种情况,那么它是唯一的并且会返回true其他,它不是唯一的并且会返回false



isUnique: function(){
      for (var i = 0; i < this.regTailors.length; i++) {
        if((this.tailor.tUsername!=this.regTailors[i].tUsername) && (this.tailor.tPassword!=this.regTailors[i].tPassword))
         return true;
        else
         return false;
      }
    }
&#13;
&#13;
&#13;

当我尝试输入用户名和密码的 sonny sonny 时,控制台显示true这是预期的输出。然后我尝试了 marantzmarantz sonny (反之亦然)它显示了false,这是预料之后的。但是当我尝试输入 dyalibidyalibi sonny (反之亦然)时,它显示true不应该是这种情况,因为其中一个注册用户已经 dyalibidyalibi 的用户名或密码!

我的循环有问题吗?还是我的布尔表达式?如何解决这个问题,以便注册的用户在将其保存到数据库之前始终拥有唯一的用户名和密码?

编辑:我在console.log()循环中添加了一些for,似乎计数器i停留在0并且它永远不会达到1.我检查了长度数组,它总是显示2,所以我认为长度上没有问题。我错过的似乎是什么问题?已经两天了,我无法弄清楚

2 个答案:

答案 0 :(得分:1)

我建议您尝试使用内置函数find的解决方案,在这种情况下,您希望使用for循环将一个值与数组进行比较并尽快返回布尔值评估是否满意,但是一旦您的条件得到满足,这个评估就会停止,为什么?因为for循环子句使用return键停止,它类似于在函数中返回值时(它停止函数执行)。

所以尝试这样的事情:

isUnique() {
  var hasTheSameValue = ['dyalibidyalibi', 'marantzmarantz'].find(function (elemOfArrayToEvaluate) {
    return elemOfArrayToEvaluate === 'Your current username or pass value';
  })

  if (hasTheSameValue) {
    // has the same value so it's not unique
    return false
  } else {
    return true
  }

}

您可以找到有关find功能here

的更多信息

答案 1 :(得分:0)

我将我的for循环代码段发送给了我的朋友,他在循环中告诉我短路的概念,因为return( @Ricardo Orellana指出这一点也是如此。所以我认为不是返回一个布尔值,我只是将它分配给一个声明的变量,然后将return分配给它。我将遍历数组,找到用户名和密码的匹配项。如果匹配,我会将false分配给变量并将break分配给循环。如果没有,请指定true并循环直到结束。

&#13;
&#13;
isUnique: function(){
      let result;
      for (var i = 0; i < this.regTailors.length; i++) {
        if((this.tailor.tUsername!=this.regTailors[i].tUsername) && (this.tailor.tPassword!=this.regTailors[i].tPassword))
         result = true;
        else{
         result = false;
         break;
        }
      }
      return result;
    }
&#13;
&#13;
&#13;