2017-10-18 125 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