Firebase:防止在多个设备上使用同一帐户

Firebase:防止在多个设备上使用同一帐户,firebase,account,Firebase,Account,我正在开发angular应用程序,我使用Firebase对我的用户进行身份验证。 我想知道如何防止我的用户将他们的帐户提供给其他人。 此外,我想防止人们使用相同的帐户登录不同的设备在同一时间。 我找到了一些非常好的教程来构建一个状态系统,但是这些系统并不能阻止同一个帐户被不同的人在不同的设备上使用。 我已经能够检查一个用户是否正在尝试使用一个已经在使用(在线)的帐户,但我无法注销其中一个用户(使用alreaydy在线帐户…)。 我试图在signInwithemailAndPassword()方法

我正在开发angular应用程序,我使用Firebase对我的用户进行身份验证。 我想知道如何防止我的用户将他们的帐户提供给其他人。 此外,我想防止人们使用相同的帐户登录不同的设备在同一时间。 我找到了一些非常好的教程来构建一个状态系统,但是这些系统并不能阻止同一个帐户被不同的人在不同的设备上使用。 我已经能够检查一个用户是否正在尝试使用一个已经在使用(在线)的帐户,但我无法注销其中一个用户(使用alreaydy在线帐户…)。 我试图在signInwithemailAndPassword()方法中调用auth.signout(),但它不起作用,我没有成功注销用户。
谢谢你的帮助。我需要的是一个片段,因为从理论上讲,一切都很简单。

既然你没有说明你在使用什么语言,我就用Swift,但我在这里阐述的原则对任何语言都是一样的

看一看。Firebase似乎不直接支持您正在寻找的内容。但是,您可以这样做:

在数据库中创建一个树,该树存储用户登录的布尔值

SignedIn: {
    uid1: {
        "signedIn": true
    }
    uid2: {
        "signedIn": false
    }
    .....
}
我假设在认证后你会改变屏幕。在执行此操作之前,您现在需要执行一个额外的查询。如果用户已经登录,您可以显示警报,否则您可以像往常一样继续

func alreadySignedIn() {
     if let uid = Auth.auth().currentUser?.uid {
        Database.database().reference().child("SignedIn").child(uid).observeSingleEvent(of: .value, with: { snap in
            if let dict = snap.value as? [String: Any] {
                if let signedIn = dict["signedIn"] as? Bool {
                    if signedIn {
                        // display an alert telling the user only one device can use
                        // there account at a time
                    }
                    else {
                        // change the screen like normal
                    }
                }
            }
        })
     }
}
当然,这只是防止帐户同时被“共享”。如果您只允许基于设备id登录,则可以制定更严格的准则。例如,您可以并且只允许在该设备上登录。您必须允许用户在获得新设备时更新此信息,但如果您真的想锁定您的帐户,这可能是一个更好的选择

  • 实际上,你不能阻止你的用户与其他人共享他们的帐户
  • 但是,您可以确保您的用户同时只能在一台设备上登录
  • 通常,您不能注销已经登录的用户,除非您可以将消息通知您的客户
  • 但正如@DoesData所说,您可以保留登录状态数据,当客户端访问服务器时,它会发现它已经注销,或者其他人已经登录

TY DoesData它启发我在angular2中实施一个解决方案