Firebase:防止在多个设备上使用相同的帐户
Posted
技术标签:
【中文标题】Firebase:防止在多个设备上使用相同的帐户【英文标题】:Firebase : Prevent same account on multiple devices 【发布时间】:2018-05-24 21:13:51 【问题描述】:我正在开发一个 Angular 应用程序,我使用 Firebase 对我的用户进行身份验证。 我想知道如何防止我的用户将他们的帐户提供给其他人。 另外我想防止人们使用同一个帐户同时从不同的设备登录。 我找到了一些非常好的教程来构建一个存在系统,但是这些系统并不能阻止许多不同的人在多个设备上使用同一个帐户。 我已经能够检查用户是否正在尝试使用已在使用中的帐户(在线),但我无法设法注销其中一个用户(使用已经在线的帐户..)。 我试图在 signInwithemailAndPassword() 方法中调用 auth.signout() 但它不起作用,我没有成功注销用户。 谢谢您的帮助。我需要的是一个 sn-p,因为从理论上讲,一切都很简单。
【问题讨论】:
【参考方案1】: 实际上,您无法阻止您的用户与其他人共享他们的帐户。 但是,您可以确保您的用户只能同时在一台设备上登录。 通常情况下,您无法退出已登录的用户,除非您可以通知您的客户该消息。 但是正如@DoesData所说,你可以保留一个登录状态数据,当客户端访问服务器时,它可以发现它已经被注销,或者其他人已经登录。【讨论】:
【参考方案2】:由于您没有说明您使用的是哪种语言,所以我将使用 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 并且只允许在该设备上登录。您必须允许用户在获得新设备时对其进行更新,但如果您真的想锁定您的帐户,这可能是一个更好的选择。
【讨论】:
TY DoesData 它启发了我在 angular2 中实现解决方案 如果有人使用这样的解决方案,请确保您了解 Firebase 将在用户离开应用程序并且几周左右没有回来后撤销身份验证令牌......这显然可以导致您的服务器数据不同步并锁定某人。我目前正在寻找解决方案以上是关于Firebase:防止在多个设备上使用相同的帐户的主要内容,如果未能解决你的问题,请参考以下文章