0

これは私の前の投稿を編集して、さらに2日間試行錯誤して編集しようとしたものです。Firebaseでサインインした後のルーティング

具体的には、入力された電子メールまたは管理者IDに基づいて特定のページにルーティングすることです。今すぐサインインすると、firebaseはデータベースにアカウントを持っていることを認証します。この関数の最後にあるwhileループが設定されていれば、正しいマップに移動します。

しかし、データベースに存在しない電子メールでサインインすると、エラー処理によってエラーが警告されますが、それ以上のことはできません。 ITは私が必要とすることをやり遂げることができません。それは、機能を停止または復帰させ、ただ機能を停止させることです - 私はそれができないと仮定しています。私はwhileループをエラー処理中の条件文の中に入れようとしましたが、何もサインインしようとしないときに何もしないようです。私は変数を使って(+1)を試してみましたが、whileループを実行しない場合は0を返しますが、エラー処理のスコープが実際にグローバル変数を変更しないことが記憶されています。

これは私を夢中にさせています。エラーコードまたはerrorMessageが表示されたら、whileループを実行しないようにダムコードが必要です。コードの大将は私にいくつかの指導を与えてください。

コードを、そのまま...

<!-- <a ="btn-signup" href="#signup">sign up </a> --> 
    <div class="btn-signin" id="btn-signin"> 
    <form action="javascript: submitform()" method="get" id="myForm"> 
    <input type="email" name="email" id="emailInput" placeholder="Enter School Email"> 
    <input type="password" name="password" id="passwordInput" placeholder="Enter Password"> 
    <input type="text" name="uniqueID" id="myAdminID" placeholder="Admin ID *if applicable*"> 
    <input type="submit" id="emailSubmit" value="Submit">  
    </form> 
    </div> 
    <!-- Routing based on email ending "@fordham.edu" --> 
    <script type="text/javascript"> 
    function submitform() { 
     var email_input = document.getElementById("myForm").elements.namedItem("email").value; 
     var password_input = document.getElementById("myForm").elements.namedItem("password").value; 
     var adminID = document.getElementById("myForm").elements.namedItem("uniqueID").value;   

     if ((email_input.indexOf('.edu') >= 0) && (password_input.length > 4)) { 
     firebase.auth().signInWithEmailAndPassword(email_input, password_input).catch(function(error) { 
      // Handle Errors here. 
      var errorCode = error.code; 
      var errorMessage = error.message; 
      if(errorCode === "auth/user-not-found") { 
       alert("User does not exist - go ahead and sign up first");     
      } else if(errorCode === "auth/wrong-password") { 
       alert("You might have the wrong password, try again"); 
      }   
      // ... 
     });     
     } else if ((adminID.indexOf('GJGBING') >= 0) && (password_input.length > 4)) { 
     firebase.auth().signInWithEmailAndPassword(email_input, password_input).catch(function(error) { 
      // Handle Errors here. 
      var errorCode = error.code; 
      var errorMessage = error.message; 
      if(errorCode === "auth/user-not-found") { 
       alert("User does not exist - go ahead and sign up first"); 
      } else if(errorCode === "auth/wrong-password") { 
       alert("You might have the wrong password, try again"); 
      }      
      // ... 
     });     
     } else { 
     alert("Please use a .edu email address or enter your unique Admin ID"); 
     return; 
     }; 


     var schools = ["@fordham.edu", "@sjsu.edu"]; 
     var mapLocations = ["#select-a-machine", "#select-a-machine"]; 
     var adminIdLocation = ["#select-a-machine"] 
     var adminIDs = ["GJGBING"]   
     var i = 0; 
     var a = 0; 

     while (a < adminIDs.length) { 
      if (adminID.indexOf(adminIDs[a]) >= 0) { 
       window.location.assign(adminIdLocation[a]); 
       break; 
      } else if (adminID.indexOf(adminIDs[a]) < 0) { 
       a++; 
      } 
     }; 


     while (i < schools.length) { 
      if(email_input.indexOf(schools[i]) >= 0) { 
       window.location.assign(mapLocations[i]); 
       break; 
      } else if(email_input.indexOf(schools[i]) < 0) { 
       i++; 
      } 
     }; 

     if(i >= schools.length && (email_input.indexOf('.edu') >= 0)) { 
      alert("We are currently not at your school"); 
     }; 

    }; 
    </script> 

答えて

0

使用:条件文の2つのレベルの内にネストされたときに

return; 

ブレークは動作しません。リターンのこの使用法と比較して、それは全体の機能殺す

function test(){ 
for (i = 0; i < 10; i++) { 
    console.log(i); 
    if (i >= 5){ 
     console.log("great than five"); 
     while(i == 5){ 
      break; 
      console.log("break stops this conditional loop the function"); 
     } 
    } 
} 
    console.log("this will execute"); 
} 

:この機能は、onSubmit検証機能を使用する場合は

function test(){ 
for (i = 0; i < 10; i++) { 
    console.log(i); 
    if (i >= 5){ 
     console.log("great than five"); 
     while(i == 5){ 
      return; 
      console.log("return kills this function, this won't log"); 
     } 
    } 
} 
    console.log("this won't execute"); 
} 
+0

場合 - 私が置かエラーがスローされた場合にアクティブになる条件付きの内部?私はアラートの前後に配置しようとしましたが、フォームを提出しようとするとどちらの場合も何もしません。コンソールには2つのエラーがあります。 「提出フォームは定義されていません」とUncaught SyntaxErrror:Unexpectedトークン。 – sergio

+0

私はこれをテストしましたが、私の答えを編集するつもりです。そのスレッドはうまくいくと言って間違っていました。下の答えが示すように、単純なリターンが働くはずです。ブレークは、2つのレベルの条件内にネストされているため、コードを保持する方法では機能しません。しかし、私はあなたがそれが働いていることを示すために上記で編集するテストを行いました。 –

+0

私は自分のコードに戻り値を追加しましたが(元の投稿でチェックしてください)、問題は資格情報が正しいときに何もしないことです。それは、エラーメッセージやコード、あるいは経路を警告することはありません。しかし、ユーザーが存在しない場合は、エラーメッセージが表示され、それがどこにあるかは肯定的です。何かご意見は? – sergio

0

を、あなたはその後、ここで私はそれを証明するために使用されるテストです目的の場所に次の行を追加する必要があります。

return false; 

フォーム提出を防ぐためです。詳しくは

EDIT 1用javascript: does onsubmit only execute when it detects a "return false"を参照してください。 私はあなたの問題はあなたがsignInWithEmailAndPasswordの実行に追加するエラー関数は()エラーが発生した場合にはfirebaseによって実行されていること、だと思います。申し込みを促すメッセージが表示されたときに、リロード処理が既に実行されています。 firebaseによって提供されたエラーメッセージとコード を表示する警告を追加できます。

あなたは、この場合に提出を停止する場合は、if文でlocation.reloadを削除し、ちょうど他の前に並んでのerrorCodeの値をチェックし、私は置くべき

 }); 
    if (errorCode) { 
     return false; 
    } 
    } else if (adminID.indexOf('GJGBING') >= 0) { 
+0

元の投稿を編集して、HTMLが表示されていることを表示します。 – sergio

+0

"return false;'を使用して、submitform関数のどこでも投稿を中止したい場合は、 – Guenther

+0

あなたに残念ながら、それはうまくいきませんでした。同じことが起こった。私はサインアップしてから別の場所にルーティングされたという警告が発せられました – sergio

関連する問題