仅允许页面上经过身份验证的用户

时间:2017-02-18 18:59:51

标签: javascript firebase firebase-authentication

我想知道如何配置页面以仅允许Firebase中经过身份验证的用户。我在设置我的网站时遇到了困难,我希望用户输入登录名和密码,然后在进行身份验证后会转到他的个人资料。

用户所指向的个人资料(网页)具有网址

  

www.example.com/ “user.uid” /index.html

但只有经过身份验证的用户才能访问此页面,因此如果有人访问了该网址

  

www.example.com/ “user.uid” /index.html

用户必须被定向到主页

  

http://www.example.com

登录页面上的代码:

btnLogin.addEventListener('click', e =>{
        const email = txtEmail.value;
        const pass = txtPassword.value;
        const auth = firebase.auth();
        const promise = auth.signInWithEmailAndPassword(email,pass);
        promise
        .then(user => window.location.href="http://www.example.com/" + user.uid + "/index.html")
        .catch(e => console.log(e.message));
    })

客户页面上的代码:

firebase.auth().onAuthStateChanged(firebaseUser => {
        if(firebaseUser){
            console.log(firebaseUser);
        }else{
            window.location.href = "http://www.example.com";
            console.log("offline");
                    }
});

我遇到的问题是,当您重定向到客户端页面时,用户的状态将会脱机

1 个答案:

答案 0 :(得分:0)

Firebase经过优化,可以在客户端工作,特别是单页面应用程序。您可以执行以下操作之一:

  1. 处理身份验证检查客户端:在该页面上添加onAuthStateChanged侦听器www.example.com/"user.uid" /index.html:如果用户未登录并且没有&# 39; t匹配该页面的uid,重定向到登录页面。

  2. 使用cookies。登录后,您可以将Firebase ID令牌发送到后端并填充会话Cookie或仅使用ID令牌作为会话Cookie。确保在执行此操作之前验证该ID令牌。 Firebase有一个node.js和java库来帮助解决这个问题。您还必须确保始终在客户端收听身份验证更改,因为Firebase ID令牌每小时到期。无论如何,使用cookie,下次用户请求受限资源时,您检查cookie是否有效并在提供该资源之前与预期用户匹配,否则302与登录页面匹配。