Firebase:防止多个设备上的同一帐户

时间:2017-12-11 10:56:06

标签: firebase account

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

2 个答案:

答案 0 :(得分:7)

由于你没有说明你正在使用什么语言我只是要使用Swift,但我在这里列出的原则与任何语言都是一样的。

看看this question。 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登录,则可以制定更严格的准则。例如,您可以get the device id并且只允许在该设备上登录。您必须允许用户在获得新设备时更新此设置,但如果您确实想要锁定帐户,这可能是更好的选择。

答案 1 :(得分:1)

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