Firebase临时禁止帐户

时间:2016-11-18 17:08:15

标签: ios swift firebase firebase-realtime-database firebase-authentication

我正在尝试创建一个您必须登录/注册的应用。我可以通过为其帐户创建一个名为“已禁用”的值来永久禁止用户,并将此值设置为“是”。如果此值为“是”,那么每次登录时都会检查,如果不是,他将无法登录。 暂时禁止账户是否可能?我当时想要在禁令发生时保存当前时间,然后加上禁令的时间。如果临时禁令值(时间)高于当前时间,则每次玩家登录时检查,如果是,则仍然禁止玩家。如果值(时间)低于玩家未被禁止的。但我认为他们只是可以在他们的设备设置中改变它。

还有其他办法吗?

2 个答案:

答案 0 :(得分:3)

你可以disable a user's account through the Firebase Admin SDK。但这不会自动退出用户。这只会阻止他们再次登录。

为防止用户进行未经授权的更改,您可能想要将已禁用用户的黑名单添加到您的数据库中:

/bannedUsers
  uid1: <banned-until-timestamp>
  uid2: <banned-until-timestamp>
  uid3: <banned-until-timestamp>

然后你可以check this list from your security rules

".write": "!root.child('bannedUsers').child(auth.uid).exists() || 
            root.child('bannedUsers').child(auth.uid).val() < now"

答案 1 :(得分:3)

也许一个可能适合你的想法:

要禁止用户,请在数据库中为用户创建一个条目,将用户标记为禁止时间戳为NOW + X

{ "users" : {
     "bad_user" : {
         "banned" : {
            "until" : 123456 // timestamp NOW + X
         }
     }
  }
}

现在,无论用户何时登录,您都会检查用户是否被禁止,并立即尝试删除该条目。如果失败,惩罚时间仍在运行。如果成功,则用户可以使用您的应用程序:)

诀窍是使用firebase规则来限制可能的更改。

类似的东西:

{ 
  "rules" : {
    "users" : {
      "$uid" : {
       // ...
        "banned" : {
          .write : "(!newData && now < data.child('until').val() )"
....

请注意 - 这些不是工作规则,但应该有助于弄明白。