2016-07-07 100 views
0

我有一个可以从各种设备登录的Firebase应用程序,但是如果使用相同的帐户制作新的应用程序,我想断开其他连接。Firebase用户已登录

我看到这段代码,但我认为这可能是旧版本:

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    // User is signed in. 
    } else { 
    // No user is signed in. 
    } 
}); 

这看起来是个好主意 - 如果调用此方法我可以显示图形的说法,“糟糕的样子您在其他设备上登录过。“然后发起断开连接,同时允许另一个连接继续?

回答

0

这不是您可以单独使用auth处理的事情,因为令牌是独立生成和存储的,并且没有可以查询的“设备会话”的概念。但是,你可以做这样的事情:

var deviceId = generateARandomDeviceIDAndStoreItInLocalStorage(); 

firebase.auth().signInWithPopup(/* ... */).then(function(user) { 
    var userRef = firebase.database().ref('users').child(user.uid); 
    return userRef.update({ 
    deviceId: deviceId 
    }); 
}); 

firebase.auth().onAuthStateChanged(function(user) { 
    var userRef = firebase.database().ref('users').child(user.uid); 
    userRef.child('deviceId').on('value', function(snap) { 
    if (snap.val() !== deviceId) { 
     // another device has signed in, let's sign out 
     firebase.auth().signOut(); 
    } 
    }); 
}); 

重要的警告:这并不是保证一次只有一个设备登录安全的,可执行的方式。相反,客户端驱动的方式通常只能实现一个设备登录的目标。