我有一个firebase应用程序,我可以从各种设备登录,但如果我使用同一个帐户创建一个新连接,我想断开其他连接。
我看到了这段代码,但我认为这可能适用于旧版本:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
} else {
// No user is signed in.
}
});
这看起来是正确的想法 - 如果这被调用我可以显示图形说法,"哎呀看起来像你在另一台设备上登录。"然后在允许其他连接继续的情况下触发断开连接?
答案 0 :(得分: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();
}
});
});
重要CAVEAT:这不是一种安全,可执行的方法,可以保证一次只能登录一台设备。相反,它是一种客户驱动的方式,通常可以实现只有一个设备登录的目标。