Javascript 表单提交问题上的Firebase匿名登录
我正在尝试这样做,当我的用户单击我的登录表单上的提交按钮时,他们将作为Firebase中的匿名用户登录。我知道我的提交按钮正在触发jQuery提交事件,因为其中的警报正在显示。但是,即使submit按钮触发jQuery submit事件,由于某种原因,Javascript 表单提交问题上的Firebase匿名登录,javascript,jquery,firebase,firebase-authentication,Javascript,Jquery,Firebase,Firebase Authentication,我正在尝试这样做,当我的用户单击我的登录表单上的提交按钮时,他们将作为Firebase中的匿名用户登录。我知道我的提交按钮正在触发jQuery提交事件,因为其中的警报正在显示。但是,即使submit按钮触发jQuery submit事件,由于某种原因,方法也没有被调用。我还尝试过使用一个将的调用显式地放到一个单独的函数中,并使用formonsubmit属性,但这也不起作用。这是我的代码(为了安全起见,我省略了配置细节): 逃生室 //初始化Firebase 变量配置={ apiKey:“, a
方法也没有被调用。我还尝试过使用一个将的调用显式地放到一个单独的函数中,并使用formonsubmit
属性,但这也不起作用。这是我的代码(为了安全起见,我省略了配置细节):
逃生室
//初始化Firebase
变量配置={
apiKey:“,
authDomain:“”,
数据库URL:“”,
storageBucket:“”,
messagingSenderId:“
};
firebase.initializeApp(配置);
//初始化身份验证
var auth=firebase.auth();
//处理经过身份验证的用户
auth.onAuthStateChanged(函数(用户){
如果(用户){
//用户已登录。
var isAnonymous=user.isAnonymous;
var uid=user.uid;
// ...
}否则{
//用户已注销。
// ...
}
// ...
});
//当加载DOM时
$(文档).ready(函数(e){
$(“#签名”).submit(函数(e){
//防止页面刷新
e、 预防默认值();
警报(“测试”);
//验证用户
auth.signinanoymously().catch(函数(错误){
警报(“test2”);
//在这里处理错误。
var errorCode=error.code;
var errorMessage=error.message;
控制台错误(error);
});
});
});
名称
背心号码
开始
我是Firebase的新手,这让我感到困惑,所以非常感谢您的帮助 我发现出了什么问题。由于我从未调用过firebase.auth().signOut()
,它让我以同一用户身份登录,因此每次我提交表单时它都不会创建新用户,因为我已经以用户身份登录。我添加了window.onload=auth.signOut()现在,每当我按下提交按钮时,就会创建一个新用户。我发现了问题所在。由于我从未调用过firebase.auth().signOut()
,它让我以同一用户身份登录,因此每次我提交表单时它都不会创建新用户,因为我已经以用户身份登录。我添加了window.onload=auth.signOut()代码>到我头脑中的脚本,现在每次我按下提交按钮时都会创建一个新用户。你确定没有调用它吗?您在auth.onAuthStateChanged
中注册的函数应该被激发,请尝试在那里添加警报。(您可能会看到它在页面加载时也会被触发。)@ArneHugo我尝试在auth.onAuthStateChanged
中添加警报,但没有触发。我也没有看到在Firebase控制台中创建的用户,如果该函数被触发,就会发生这种情况代码>显示?@FrankvanPuffelen是的,是的。我在代码中添加了第二个警报以进行澄清<代码>警报(“测试”)代码>显示但警报('test2')
没有显示我如何知道没有调用auth.Signinanoymously()
。@ArneHugo只是为了进一步澄清,当我将警报添加到auth.onAuthStateChanged
时,它确实在加载页面时触发,但在我按下submit按钮时没有再次触发。你确定没有调用它吗?您在auth.onAuthStateChanged
中注册的函数应该被激发,请尝试在那里添加警报。(您可能会看到它在页面加载时也会被触发。)@ArneHugo我尝试在auth.onAuthStateChanged
中添加警报,但没有触发。我也没有看到在Firebase控制台中创建的用户,如果该函数被触发,就会发生这种情况代码>显示?@FrankvanPuffelen是的,是的。我在代码中添加了第二个警报以进行澄清<代码>警报(“测试”)代码>显示但警报('test2')代码>没有显示我如何知道没有调用auth.signinanoymously()
。@ArneHugo只是为了进一步澄清,当我将警报添加到auth.onAuthStateChanged
时,它确实在加载页面时触发,但在我按下提交按钮时没有再次触发。
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags always come first -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>Escape Room</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="resources/bootstrap/css/bootstrap.min.css">
<!-- Custom CSS -->
<link rel="stylesheet" href="styles.css">
<!-- jQuery -->
<script src="resources/jquery/jquery-3.1.1.slim.min.js"></script>
<!-- Firebase -->
<script src="https://www.gstatic.com/firebasejs/3.6.2/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.6.2/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.6.2/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/3.6.2/firebase-messaging.js"></script>
<script>
// Initialize Firebase
var config = {
apiKey: "",
authDomain: "",
databaseURL: "",
storageBucket: "",
messagingSenderId: ""
};
firebase.initializeApp(config);
//Initialize authentication
var auth = firebase.auth();
// Handle authenticated users
auth.onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
var isAnonymous = user.isAnonymous;
var uid = user.uid;
// ...
} else {
// User is signed out.
// ...
}
// ...
});
// When the DOM has loaded
$(document).ready(function(e) {
$('#signIn').submit(function(e) {
// Prevent the page from refreshing
e.preventDefault();
alert("test");
// Authenticate user
auth.signInAnonymously().catch(function(error) {
alert('test2');
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
console.error(error);
});
});
});
</script>
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-12">
<form id="signIn">
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" placeholder="Your Name">
</div>
<div class="form-group">
<label for="vest">Vest Number</label>
<input type="text" class="form-control" placeholder="Vest Number">
</div>
<button type="submit" class="btn btn-primary">Start</button>
</form>
</div>
</div>
</div>
<!-- jQuery first, then Tether, then Bootstrap JS. -->
<script src="resources/jquery/jquery-3.1.1.slim.min.js"></script>
<script src="resources/tether/js/tether.min.js"></script>
<script src="resources/bootstrap/js/bootstrap.min.js"></script>
</body>
</html>