Javascript 表单提交问题上的Firebase匿名登录

Javascript 表单提交问题上的Firebase匿名登录,javascript,jquery,firebase,firebase-authentication,Javascript,Jquery,Firebase,Firebase Authentication,我正在尝试这样做,当我的用户单击我的登录表单上的提交按钮时,他们将作为Firebase中的匿名用户登录。我知道我的提交按钮正在触发jQuery提交事件,因为其中的警报正在显示。但是,即使submit按钮触发jQuery submit事件,由于某种原因,方法也没有被调用。我还尝试过使用一个将的调用显式地放到一个单独的函数中,并使用formonsubmit属性,但这也不起作用。这是我的代码(为了安全起见,我省略了配置细节): 逃生室 //初始化Firebase 变量配置={ apiKey:“, a

我正在尝试这样做,当我的用户单击我的登录表单上的提交按钮时,他们将作为Firebase中的匿名用户登录。我知道我的提交按钮正在触发jQuery提交事件,因为其中的警报正在显示。但是,即使submit按钮触发jQuery submit事件,由于某种原因,
方法也没有被调用。我还尝试过使用一个将
的调用显式地放到一个单独的函数中,并使用form
onsubmit
属性,但这也不起作用。这是我的代码(为了安全起见,我省略了配置细节):


逃生室
//初始化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>