Firebase:防止在多个设备上使用相同的帐户
Firebase : Prevent same account on multiple devices
我正在开发一个 angular 应用程序,我使用 Firebase 对我的用户进行身份验证。
我想知道如何防止我的用户将他们的帐户提供给其他人。
另外我想防止人们使用同一个帐户同时从不同的设备登录。
我找到了一些非常好的教程来构建在线状态系统,但是这些系统并不能阻止许多不同的人在多个设备上使用同一个帐户。
我已经能够检查用户是否正在尝试使用已经在使用(在线)的帐户,但我无法设法注销其中一个用户(使用已经在线的帐户..)。
我试图在 signInwithemailAndPassword() 方法中调用 auth.signout() 但它不起作用,我没有成功注销用户。
谢谢您的帮助。我需要的是一个片段,因为从理论上讲,一切都非常简单。
由于您没有说明您使用的是什么语言,我将使用 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
}
}
}
})
}
}
当然这只是防止帐户同时"shared"。如果您只允许基于设备 ID 登录,则可以制定更严格的准则。例如,您可以 get the device id 并且只允许在该设备上登录。您必须允许用户在获得新设备时进行更新,但如果您真的想锁定您的帐户,这可能是更好的选择。
- 实际上,您无法阻止您的用户与其他人共享他们的帐户。
- 但是,您可以确保您的用户只能同时在一台设备上登录。
- 通常情况下,您无法注销已登录的用户,除非您可以将此消息通知您的客户。
- 但是正如@DoesData所说,你可以保留一个登录状态数据,当客户端访问服务器时,可以发现自己已经退出,或者其他人已经登录。
我正在开发一个 angular 应用程序,我使用 Firebase 对我的用户进行身份验证。 我想知道如何防止我的用户将他们的帐户提供给其他人。 另外我想防止人们使用同一个帐户同时从不同的设备登录。 我找到了一些非常好的教程来构建在线状态系统,但是这些系统并不能阻止许多不同的人在多个设备上使用同一个帐户。 我已经能够检查用户是否正在尝试使用已经在使用(在线)的帐户,但我无法设法注销其中一个用户(使用已经在线的帐户..)。 我试图在 signInwithemailAndPassword() 方法中调用 auth.signout() 但它不起作用,我没有成功注销用户。 谢谢您的帮助。我需要的是一个片段,因为从理论上讲,一切都非常简单。
由于您没有说明您使用的是什么语言,我将使用 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
}
}
}
})
}
}
当然这只是防止帐户同时"shared"。如果您只允许基于设备 ID 登录,则可以制定更严格的准则。例如,您可以 get the device id 并且只允许在该设备上登录。您必须允许用户在获得新设备时进行更新,但如果您真的想锁定您的帐户,这可能是更好的选择。
- 实际上,您无法阻止您的用户与其他人共享他们的帐户。
- 但是,您可以确保您的用户只能同时在一台设备上登录。
- 通常情况下,您无法注销已登录的用户,除非您可以将此消息通知您的客户。
- 但是正如@DoesData所说,你可以保留一个登录状态数据,当客户端访问服务器时,可以发现自己已经退出,或者其他人已经登录。