我正在尝试创建一个带有firebase和登录的注册表单,我已经尝试了很多东西,但它不会起作用。当我点击调用方法auth.createUserWithEmailAndPassword(email, pass)
的注册按钮时,我不断收到此错误。
发生网络错误(例如超时,中断连接或无法访问的主机)。
下面是我的HTML
的一部分<div class="col l7" id="signup">
<h4>Signup</h4>
<div class="form card">
<br>
<div class="switch">
<label>
Student
<input name="student_" id="student_" type="checkbox">
<span class="lever"></span>
Staff
</label>
</div>
<div class="container">
<input type="text" placeholder="Name" id="signup_fullname">
<!--student/staff-->
<input type="text" placeholder="Matric Number/Staff no." id="signup_matric">
<input type="email" placeholder="Email" id="signup_email">
<div class="input-field col s12">
<select id="signup_dept">
<option value="" disabled selected>Select your department</option>
<option value="ics">ICS</option>
<option value="masscomm">Mass Comm.</option>
<option value="lis">Library Science</option>
<option value="tcs">Telecomm Science</option>
<option value="csc">Computer Science</option>
</select>
</div>
<div class="input-field col s12">
<select id="signup_level">
<option value="" disabled selected>Select your Level</option>
<option value="100">100 Level</option>
<option value="200">200 Level</option>
<option value="300">300 Level</option>
<option value="400">400 Level</option>
<option value="500">500 Level</option>
</select>
</div>
<div class="input-field col s12">
<select id="signup_religion">
<option value="" disabled selected>Select your religion</option>
<option value="1">Islam</option>
<option value="2">Christianity</option>
</select>
</div>
<input type="password" placeholder="password" id="signup_password">
<!--<input type="password" placeholder="Confirm password" id="signup_confirm_password">-->
<button class="btn-large second-color" id="btnSignUp">signup</button></a>
</div>
</div>
<br>
</div>
和我的JS代码
readystatemode = false;
(function () {
var config = {
apiKey: "<my API key>",
authDomain: "<my auth domain>",
databaseURL: "<my database url>",
storageBucket: "<my storage bucket url>",
};
firebase.initializeApp(config);
// Get Elements
var student_ = document.getElementById('student_'); // check whether is a student or staff; expect on or off
var student__;
if (student_.value == "on") {
student__ = "student";
} else {
student__ = "staff";
}
var signup_fullname = document.getElementById('signup_fullname');
var signup_matric = document.getElementById('signup_matric');
var signup_email = document.getElementById('signup_email');
var signup_dept = document.getElementById('signup_dept');
var signup_level = document.getElementById('signup_level');
var signup_religion = document.getElementById('signup_religion');
var signup_password = document.getElementById('signup_password');
var login_email = document.getElementById('login_email');
var login_password = document.getElementById('login_password');
// buttons
var btnLogin = document.getElementById("btnLogin");
var btnSignUp = document.getElementById("btnSignUp");
// signup event
btnSignUp.addEventListener('click', e => {
// Get Email and pass
//TODO: check for real emails
console.log("just clicked the signup button");
var email = signup_email.value;
var pass = signup_password.value;
var auth = firebase.auth();
// sign up
const promise = auth.createUserWithEmailAndPassword(email, pass);
promise
.catch(e => console.log(e.message));
if (auth.currentUser != null) {
auth.currentUser.updateProfile({
displayName: signup_fullname,
userCategory: student__,
matric: signup_matric,
department: signup_dept,
level: signup_level,
religion: signup_religion
}).then(function () {
console.log("update successful");
window.readystatemode = true;
}, function (error) {
console.log("update failed");
});
}
});
firebase.auth().onAuthStateChanged(firebaseUser => {
if (firebaseUser && window.readystatemode) {
console.log(firebaseUser);
btnLogout.classList.remove('hide');
window.location('./dashboard.html');
} else {
console.log("not logged in");
btnLogout.classList.add('hide');
}
});
})();
答案 0 :(得分:28)
虽然这个答案与上面的实际代码无关,但我怀疑很多人都在谷歌那个错误:
“网络错误(例如超时,中断连接或 已经发生了无法访问的主机。“
可能是您的表单实际上位于HTML中的表单元素中。小虫子,但它可能有巨大的后果。如果您按照本教程进行操作:“https://www.youtube.com/watch?v=-OKrloDzGpU”,请确保您的表单没有<form></form>
标记。这将导致此错误!
答案 1 :(得分:7)
就我而言,如果您尝试重新连接到Internet,问题就解决了。
答案 2 :(得分:5)
我在使用Firebase登录设备时遇到了类似的问题,但我可以在浏览器上登录。我使用以下命令来解决问题,
- cordova插件删除cordova-plugin-whitelist -
- cordova插件添加cordova-plugin-whitelist -
答案 3 :(得分:3)
我也有同样的问题 我解决它的方法是在firebase控制台上添加firebase应用程序所在的域
答案 4 :(得分:3)
如果你正在使用Cordova(我不确定你是不是,但有些答案暗示你可能会这样),包括cordova-plugin-network-information纠正了这个问题。我确认'navigator.onLine'偶尔会出现“假”,我认为这导致Firebase认为存在问题。一旦我将cordova-plugin-network-information添加到我的项目中,问题就消失了。我没有深入研究为什么,但我怀疑这个插件有一个更好的包装导航器,可能会给Firebase更好的信息。我确实在删除插件后确认了这个问题,但重新应用它修复了它。如果我深入挖掘,我会更新这个。我希望这会有所帮助。
答案 5 :(得分:2)
我的解决方案是在Firefox中尝试。我不知道为什么,但我在Chrome中也遇到了错误。你应该试试。 问候。
答案 6 :(得分:0)
这就是为我解决问题的原因(这是针对移动应用)。我无法在我的HTML中使用标签。我在前面的答案中建议将其更改为div。我还需要关闭键盘。我正在使用离子,需要安装离子原生键盘。在我的登录功能之前,我添加了this.keyboard.close()
,一切都开始工作了。如果您不使用离子,您可以尝试使用cordova插件或类似的东西。希望这会有所帮助。
答案 7 :(得分:0)
我通过禁用我的广告拦截器解决了这个问题,在我的情况下是Ghostery。看起来它非常具有攻击性。