如何确保在firebase登录之前和之后清理我的数据?

时间:2017-06-13 10:12:32

标签: javascript ajax firebase firebase-realtime-database firebase-authentication

状况:

我正在尝试清理用户在登录时输入的数据。

应该在服务器端进行消毒,但必须在客户端上进行Firebase登录。

我的想法如下:制作一个ajax请求来清理数据,然后使用已清理的数据登录。

然后发出第二个ajax请求,将某些登录信息写入数据库(这是必要的,但与登录本身没有直接关系,必须在登录后才能完成)。

问题:

我遇到的问题如下:

我问安全堆栈交换,他们告诉我第一个ajax请求基本没用,因为它很容易被绕过。

表示用户可以输入未经过清理的数据,并且该数据将传递到登录Firebase功能的电子邮件和密码字段。

我可以将卫生处理代码移动到第二个ajax请求并删除第一个请求,以便我写入数据库的所有数据都被清理,但我不知道如何处理登录功能字段。

此外,第一个ajax请求检查重新连接。

问题:

如何确保所有数据都已清理,并且以不允许绕过该检查的方式正确验证了重新验证?

   $("#loginForm").submit(function(e) {

    e.preventDefault(); 
    var email = $("#loginEmail").val();
    var password = $("#loginPassword").val();

    $this = $(this);
    $.ajax({
        type: "POST",
        url: "login",
        data: $this.serialize()
    }).done(function(data) {

        console.log("GO!");

        if (data) {

            firebase.auth().signInWithEmailAndPassword(data.email, data.password ).then( authData => {
                $.ajax({
                    type: "POST",
                    url: "login2",
                    data: authData
                }).done(function(result) {
                    if (result == "SUCCESS0!") {
                        localStorage.setItem('amazingProMembership',true);
                        localStorage.setItem('success_msg_local2', 'You have logged in');
                        window.location.href="/screenshots/index";
                    }
                    else if (result == "SUCCESS1!") {
                        localStorage.setItem('success_msg_local2', 'You have logged in');
                        window.location.href="/screenshots/index";
                    }
                    else if (result == "ERROR!"){
                        firebase.auth().signOut().then(function() {
                            localStorage.setItem('error_msg_local', 'Please confirm your email address. Check your inbox.');
                            window.location.href="/users/login";
                            ("Login Failed: ", error);

                        });
                    }
                });

            },function(error) { 

                var errorCode = error.code;
                var errorMessage = error.message;
                localStorage.setItem('error_msg_local', "Unknown user or password");
                window.location.href="/users/login";
                ("Login Failed: ", errorMessage, errorCode);

            });  
        }
        else {
            localStorage.setItem('error_msg_local',  'Recaptcha failed'); window.location.href = "/users/login";
        }
    });
});

1 个答案:

答案 0 :(得分:1)

将数据添加到实时数据库时,如果要确保在服务器端正确验证和清理数据,则使用Cloud Functions for Firebase这是最简单,最安全的方法。只要在感兴趣的位置更改数据,您就可以编写database trigger来执行,以便在必要时对数据进行更改。函数还可以根据需要调用其他API,包括recaptcha。