Firebase Android禁止用户

时间:2017-09-08 11:20:05

标签: android firebase firebase-realtime-database firebase-authentication

我有一个Android应用程序,人们可以在聊天室上写一些东西。

他们使用Google帐户登录。我有他们的用户ID,下面显示$ uid

但如果有人写一些愚蠢的东西我想阻止这个人的写作能力。

那么我怎么能通过使用这个身体来做到这一点。或者你的建议是什么?

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

来源:https://firebase.google.com/docs/database/security/

2 个答案:

答案 0 :(得分:1)

更新了答案

首先,您必须更改禁用的用户JSON模型以遵循格式。

Change to this format

  

路径模式

     

/ banned-users / $ userid:true

     

来自上方图片

     

/ banned-users / fasjdkflksdflad:true

现在将规则更改为以下方式

{
  "rules": {
    "messages": {
      "$messageId": {
        ".read": "auth.uid != null",
        ".write": "auth.uid != null && !root.child('/banned-users/'+auth.uid).exists()"
      }
    },
  }
} 

假设您要将消息添加到/ messages路径,每条消息ID为$ messagesId,然后您的/ messages路径如下所示

{
  "messages": {
    "-KTKvywjwDv4RpYjQglu":{
       "text": "Hey Guys..."
    },
    "-KTKvywjwDv4RpYjQglu":{
       "text": "How you doing ..."
    }
  }
}

解释

根据规则,任何登录的用户都可以阅读/ ".read": "auth.uid != null",定义的那些。

要写入消息到/ messages路径,然后firebase检查(用户是否登录 AND / banned-users / user-id path存在)火力点。由于auth.uid是规则验证时使用的内部firebase变量。 ".write": "auth.uid != null && !root.child('/banned-users/'+auth.uid).exists()"定义了这一点。

您可以忽略.validate,只需使用.write即可实现此目的。

旧回答

只有安全规则才能做到这一点。

首先,您必须使用Firebase cloud functions

/chats数据库路径上创建数据库触发器。当新邮件包含愚蠢的内容时,您可以立即将其删除,然后您可以获取用户ID并将其保存到其他路径/banned-users/<userid>

现在您可以编写.validate规则来检查当前消息,用户ID不在禁止列表中。使用

".validate": "!root.child('/banned-users/'+$uid).exists()"

如果您必须完全停用用户帐户,则必须使用Firebase Admin API。

答案 1 :(得分:0)

您不需要在规则中执行此操作。你可以在&#34;身份验证&#34;中禁用该人的用户ID。 FirebaseConsole

的部分

下面附带的截图作为样本

enter image description here

与添加到必须手动输入userID的规则相比,这会容易得多。