因此,這是我嘗試編輯我以前的帖子後再花兩天時間並進行一些試驗和錯誤。在Firebase上登錄後路由
更具體地說,我需要幫助的是根據輸入的電子郵件或管理員標識號路由到特定頁面。您現在登錄後,firebase會驗證您在數據庫中有一個帳戶,並且此功能底部的while循環會被設置爲正確的地圖。
但是,如果您使用數據庫中不存在的電子郵件登錄,那麼錯誤處理將提醒一個錯誤,但它不能做更多的事情。 IT不能做我需要做的事情,那就是斷開或返回,並停止該功能 - 我假設它不能這樣做,因爲它的範圍不允許它影響整個功能。我試圖把while循環放在錯誤處理的條件中,但是似乎沒有做任何事情,因爲當我嘗試登錄時什麼也沒有發生。我甚至嘗試使用一個變量來添加(+1),然後如果它多於0而不運行while循環,但是我記得錯誤處理的範圍實際上不會改變全局變量,因此它無法訪問該變量。
這讓我發瘋 - 我只是需要dam代碼來運行while循環,如果errorCode或errorMessage出現的話。請代碼領主給我一些指導。
代碼,因爲它代表...
<!-- <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>
我應該在哪裏放 - 我把它在條件內激活,如果有錯誤拋出?我試着在提醒前後放置它,但在兩種情況下,當我嘗試提交表單時,它什麼都不做。在控制檯中,我看到與它有關的兩個錯誤; 「submitform未定義」和未捕獲的SyntaxErrror:意外令牌。 – sergio
我測試了這一點,我將編輯我的答案,該線程錯誤地說,將工作。較低的答案表明一個簡單的回報應該起作用。由於它嵌套在兩個級別的條件中,所以break不能以你擁有代碼的方式工作。但我做了一個測試,我將在上面進行編輯,向您展示它的工作原理。 –
所以我添加了返回到我的代碼(檢查出來的原始文章),但問題是,當憑證是正確的,它什麼也沒做。它不會提示錯誤消息或代碼甚至路由。然而,如果用戶不存在,它會提示一條錯誤消息,並保持它的位置,這是一個積極的。有什麼想法嗎? – sergio