2017-10-18 251 views
0

我目前正在使用Firebase在我的Vue.js项目中验证用户名和唯一性。用户名和密码验证始终返回true(使用firebase)

我的方法是这样的。首先,我将使用VUE资源阵列中的所有已注册/保存用户存储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; 
 
    });

数组将包含两个用户的用户名dyalibidyalibimarantzmarantz和密码dyalibidyalibimarantzmarantz连续(用户名和密码相同)。

然后在那之后,在computed属性下,循环访问数组,并检查当前输入的密码或用户名是否与该数组中的某个用户相匹配。如果是这样的话,那么它的独特和返回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; 
 
     } 
 
    }

当我试图进入桑尼桑尼两个用户名和密码,控制台显示true这是预期的输出。那么我试图marantzmarantzsonny(反之亦然)它显示false,这是预期再次。但是当我试图进入dyalibidyalibi桑尼(反之亦然),它显示true这不应该是这种情况,因为注册用户的一个早已dyalibidyalibi的用户名或密码!

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

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

+0

它看起来对我像你当什么*不*匹配返回true。这不正是你想要的吗? – theGleep

+0

@theGleep是的,这是我的目标。是'真'意味着用户名和密码是唯一的 – Kaddy03

+0

所以你想确保...?没有用户名匹配任何密码?或者没有两个用户名匹配?或者用户名不在数据库中? – theGleep

回答

0

,我派我for循环代码片段给我的朋友,他说我的短观在循环中循环,因为return(由于@Ricardo Orellana也指出了这一点)循环停止,所以我认为不是返回一个布尔值,而是将它赋值给一个声明的变量,而0之后它。我将通过数组循环查找用户名和密码的匹配。如果匹配,我会将false分配给一个变量,并将break循环分配给一个变量。如果不是,则分配true并循环直到结束。

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

1

我会建议你使用内置的功能find尝试的解决方案,在这种情况下要使用for循环,并返回针对阵列的一个值进行比较一旦评估得到满足,即为一个布尔值,然而,只要您的条件满足,该评估就会停止,为什么?因为使用return键的for循环子句停止,它与在函数中返回值(它停止函数执行)类似。

因此,尝试这样的事:

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

+0

我很难理解'find()'的概念,所以我很抱歉我无法详细研究这个问题太久,因为我的论文答辩会从现在开始的两天,我有很多模块实行。我会在未来尝试研究它。但是,感谢您指出因“返回”而导致循环中断的想法。它帮助我解决了我自己的问题。 – Kaddy03

+1

我很高兴为您提供帮助,并且您使用循环的解决方案也是有效的。 – ricardoorellana