これは私の前の投稿を編集して、さらに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>
場合 - 私が置かエラーがスローされた場合にアクティブになる条件付きの内部?私はアラートの前後に配置しようとしましたが、フォームを提出しようとするとどちらの場合も何もしません。コンソールには2つのエラーがあります。 「提出フォームは定義されていません」とUncaught SyntaxErrror:Unexpectedトークン。 – sergio
私はこれをテストしましたが、私の答えを編集するつもりです。そのスレッドはうまくいくと言って間違っていました。下の答えが示すように、単純なリターンが働くはずです。ブレークは、2つのレベルの条件内にネストされているため、コードを保持する方法では機能しません。しかし、私はあなたがそれが働いていることを示すために上記で編集するテストを行いました。 –
私は自分のコードに戻り値を追加しましたが(元の投稿でチェックしてください)、問題は資格情報が正しいときに何もしないことです。それは、エラーメッセージやコード、あるいは経路を警告することはありません。しかし、ユーザーが存在しない場合は、エラーメッセージが表示され、それがどこにあるかは肯定的です。何かご意見は? – sergio