2017-07-15 11 views
0

私はWebアプリケーションを構築しており、ログインサイトを構築する必要があります。このjavascriptオブジェクトをループして、入力フォームのユーザー入力(現時点で必要な電子メール(「EML」のみ)をデータと比較して、入力が正しいことを確認するにはどうすればよいですか?私は何かを作ろうとしましたが、その下のforループを思いついたのはちょうど混乱です。 (オブジェクトは別のjsファイルにあります) ありがとうございました!オブジェクトをループして結果を入力と比較するには

function validate() { 
    var un = document.login.username.value; 
    var pw = document.login.password.value; 
    var valid = false; 

    for (var key in responseData) { 
     if (responseData.hasOwnProperty(key)) { 
      for (var i = 0; i < key.length; i++) { 
       if (un == key[i]) { 
        valid = true; 
        break; 
       } 
      } 
      } 


    if (valid) { 
     alert("Login was successful. Welcome, " + un + ".") 
     window.location = "https://www.google.com"; 
     return false; 
    } 
} 
var responseData = { 
    authenticatUser: { 
    "ERR":0, 
    "RSP":{ 
     "AUTHC":"true", 
     "USR":{ 
     "ID":"2", 
     "TJT":"FULL", 
     "ACTV":"true", 
     "BO":"1489760664786", 
     "CONT":{ 
      "FNM":"John", 
      "LNM":"Doe", 
      "PHN":"5556667777", 
      "PHNTP":"NONE", 
      "EML":"[email protected]", 
      "EMLTP":"NONE" 
     }, 
     "ADMIN":"false", 
     "LLOGN":"1489760664786", 
     "ACCT":{ 
      "ID":"2", 
      "TJT":"ID" 
     } 
     } 
    } 
}, 
    getUserAccountDetails: { 
    "ERR":0, 
    "RSP":{ 
     "ACCT":{ 
     "ID":"2", 
     "TJT":"FULL", 
     "ACTV":"true", 
     "BO":"1489760664786", 
     "LU":"1489760664786", 
     "NM":"Name", 
     "DESC":"Description", 
     "CONT":{ 
      "FNM":"John", 
      "LNM":"Doe", 
      "PHN":"5556667777", 
      "PHNTP":"NONE", 
      "EML":"[email protected]", 
      "EMLTP":"NONE" 
     }, 
     "ADDRM":{ 
      "STRT":"1 Miracle Way", 
      "CITY":"San Antonio", 
      "STATE":"Texas", 
      "ZIP":"78245" 
     }, 
     "ADDRB":{ 
      "STRT":"1 Miracle Way", 
      "CITY":"San Antonio", 
      "STATE":"Texas", 
      "ZIP":"78245" 
     }, 
     "TZ":"US_CT", 
     "LICS":"1", 
     "REPOS":[ 
      { 
       "ID":"2", 
       "TJT":"ID" 
      }, 
      { 
      } 
     ], 
     "USRS":[ 
      { 
       "ID":"2", 
       "TJT":"ID" 
      }, 
      { 
      } 
     ] 
     } 
    } 
} 

}

+1

jsオブジェクト内のネストされたプロパティにアクセスする方法を尋ねる場合は、[right here](https://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays) - または - json)。また、プレーンなJSONがログインページを作成するための非常に安全な方法ではないことから、ユーザー情報の格納とアクセスには注意が必要です。 –

答えて

0

まず、ログインの詳細をクライアント側で認証したり、クライアントの詳細をプレーンテキストで保存したりする必要はありません。あなたが何をしたいか

for (var key in responseData) { 
     // THIS IS REDUNDANT 
     // YOU GOT THE KEY FROM THE OBJECT SO THIS ISN'T 
     // NECESSARY 
     if (responseData.hasOwnProperty(key)) { 
      // ITERATING OVER THE LENGTH OF THE KEY 
      // DOESN'T MAKE A LOT OF SENSE 
      // You're not in fact iterating over the object 
      for (var i = 0; i < key.length; i++) { 
       if (un == key[i]) { 
        valid = true; 
        break; 
       } 
      } 
      } 

は次にあなたがそうのようなユーザーの資格情報をチェックしましょう

{ 
    "accounts" : [ 
     { 
     "id" : "xxxxxxx", 
     "username" : "xxxxxx", 
     "password" : "xxxxxx" 
     }, 
     { 
     "id" : "xxxxxxx", 
     "username" : "xxxxxx", 
     "password" : "xxxxxx" 
     }, 
     { 
     "id" : "xxxxxxx", 
     "username" : "xxxxxx", 
     "password" : "xxxxxx" 
     } 
    ] 
} 

の線に沿って何かにJSONレスポンスデータを簡素化である:

let data = JSON.parse(responseData); 
found = false; 
for(var account in data.accounts) 
{ 
    if(account.username === un && account.password === pw) 
    { 
     found = true; 
     break; 
    } 
} 

if(found) 
{ 
    //POST user id back to server to get details 
} 

このようにして認証することを私はまったくアドバイスしません。あなたがうまくシミュレーションしたい場合は、ユーザー名とパスワードを受け入れ、サーバー側を検証して結果を返すシンプルなApacheのPHPまたはノードサーバーを実行する必要があります。

関連する問題