我目前正在使用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;
当我尝试输入用户名和密码的 sonny 和 sonny 时,控制台显示true
这是预期的输出。然后我尝试了 marantzmarantz 和 sonny (反之亦然)它显示了false
,这是预料之后的。但是当我尝试输入 dyalibidyalibi 和 sonny (反之亦然)时,它显示true
不应该是这种情况,因为其中一个注册用户已经 dyalibidyalibi 的用户名或密码!
我的循环有问题吗?还是我的布尔表达式?如何解决这个问题,以便注册的用户在将其保存到数据库之前始终拥有唯一的用户名和密码?
编辑:我在console.log()
循环中添加了一些for
,似乎计数器i
停留在0并且它永远不会达到1.我检查了长度数组,它总是显示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
并循环直到结束。
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;