首页 > 解决方案 > 如何知道用户已经在firebase中的另一个浏览器上登录

问题描述

我的项目管理模块有 reactjs 管理面板。我的要求是如果 2 个用户具有相同的用户 ID 和密码,那么他们两个都不能同时登录。如果 User1 已经登录到管理面板,那么 User2 不应该登录。我已经获得了登录用户的 Id 令牌并将其保存到数据库中,现在我想检查用户是否已经登录。如果其他用户已经登录,我不知道如何阻止用户登录管理面板。

请对代码有所了解并建议我正确的途径来满足我的要求

这是我的代码:

//AUTHENTICATION
var loggedIn = false;
var activeSession = true;
if (Config.firebaseConfig.apiKey) {

  firebase.auth().onAuthStateChanged(function (user) {
    // Retriving ID Token

      var Auth = firebase.auth();
      var idToken = Auth.currentUser.getToken();
      firebase.database().ref('activeSession').push({
        idToken:idToken,
        userEmail : user.email,
        userId: user.uid,
        isUserLoggedIn : activeSession
      });

      firebase.auth().verifyIdToken(idToken).then(function(decodedToken) {
        console.log(decodedToken);
          var uid = decodedToken.uid;
          console.log(uid);
          // ...
        }).catch(function(error) {
          // Handle error
        });


    }).catch(function(error) {
      // Handle error
      console.log(error);
    });


    if (user) {
      // User is signed in.
      console.log("User is signed in " + user.email);

      if (Config.adminConfig.allowedUsers != null && Config.adminConfig.allowedUsers.indexOf(user.email) == -1) {
        //Error, this user is not allowed anyway
        alert("The user " + user.email + " doens't have access to this admin panel!");
        firebase.auth().signOut();
      } else {
        loggedIn = true;
        displayApp();
      }



    } else {
      // No user is signed in.
      console.log("No user is signed in ");
      loggedIn = false;
      displayApp();
      if (window.display) {
        window.display();
      }

    }
  } else {
  // No user is signed in.
  console.log("No user is signed in, step 1 ");
  loggedIn = false;
  displayApp();
  if (window.display) {
    window.display();
  }
}


function displayApp() {
  if (loggedIn) {
    ReactDOM.render(
      <Admin />,
      document.getElementById('root')
    );
  } else {
    ReactDOM.render(
      <Login />,
      document.getElementById('root')
    );
  }
}
displayApp();

标签: reactjsfirebasefirebase-realtime-database

解决方案


推荐阅读