从多个页面访问Firebase用户

时间:2018-06-03 17:27:57

标签: javascript firebase firebase-authentication

我正在尝试从多个页面访问firebase身份验证用户。我试过1.html,2.html和code.js. 1.HTML

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title></title>
        <script src="https://www.gstatic.com/firebasejs/4.10.0/firebase.js"></script>
    </head>
    <body>
        <input type="email" id="email">
        <input type="password" id="password">
        <button onclick="sign()">Yo</button>
    </body>
    <script src="code.js"></script>
</html>

2.HTML

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title></title>
        <script src="https://www.gstatic.com/firebasejs/4.10.0/firebase.js"></script>
    </head>
    <body>
        <p id="p" onload="runIt()">TEST</p>
    </body>
    <script src="code.js"></script>
</html>

CODE.JS

var config = {
    apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    authDomain: "xxxxxxxxxxxxxxxxxxxxxxxxx.com",
    databaseURL: "https://xxxxxxxxxxxxxxxxxxxxxx.com",
    projectId: "xxxxxxxxxxxxxxxxxxxx",
    storageBucket: "xxxxxxxxxxxxxxxx.appspot.com",
    messagingSenderId: "xxxxxxxxxxx"
};
firebase.initializeApp(config);
function sign() {
    var email = document.getElementById('email').value;
    var password = document.getElementById('password').value;
    firebase.auth().signInWithEmailAndPassword(email, password).then(function() {
        window.location = "2.html";
    });
}
function runIt() {
   console.log(firebase.auth().currentUser.uid);
}

我如何能够在控制台中从第二页登录用户的uid?谢谢!

3 个答案:

答案 0 :(得分:0)

你试试:

var user = firebase.auth().currentUser;

if (user != null) {
  uid = user.uid; 
}

答案 1 :(得分:0)

在用户签名之前,它被称为该功能。你必须给它一秒钟。你可以写:

function initApp() {
    firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
            // User is signed in.
            console.log(firebase.auth().currentUser.uid);
        }
    });
}

然后,它会在auth状态发生变化或用户登录后记录uid。

答案 2 :(得分:0)

您正在从同一域/ ipaddr提供的两个页面上加载共享Firebase JavaScript SDK和firebase配置文件。授权令牌已授予并按配置保留。每个新页面加载都会导致状态更改.firebase.auth().onAuthStateChanged

Authentication State Persistence

  

您可以指定使用时身份验证状态的持续状态   Firebase JS SDK。这包括指定是否签名的能力   用户应该无限期地持续到明确退出,   窗口关闭或页面重新加载时清除。

Expected behavior across browser tabs

  

当不同的持久性时,将应用以下预期行为   类型用于不同的选项卡。要求是任何   一点,永远不应该有多种类型的保存状态   同一时间(例如,在会话中保存的身份验证状态和本地类型的   存储):

     
      
  • 用户可以在多个标签上使用不同用户的会话或非持久性登录。每个标签都看不到对方的状态   标签。
  •   
  • 将在所有选项卡上检测并同步任何使用本地持久性登录的尝试。如果用户之前已登录过   使用会话或无持久性的特定选项卡,该状态将是   清零。
  •   
  • 如果用户以前使用打开了多个选项卡的本地持久性登录,则切换为none或会话持久性   在一个选项卡中,该选项卡的状态将与用户一起修改   持久存在会话或无,并且在所有其他选项卡上,用户将是   退出了。
  •