当前位置: 首页 > 面试题库 >

FireBase-如何列出用户特定的数据?

沈树
2023-03-14
问题内容

目前,我一直在研究FireBase,并且一直在使用AngularJS插件,并且发现了以下我无法解决的问题。

我目前已经实现了简单的登录系统。注册后使用我的邮件和密码登录,我创建了这样的帖子:

post = {
 name: "Hi",
 message: "Guys",
 user_id: Auth.user.id // for my current user this is 1
}
posts.$add(post)

从这一点来看,一切都很好。现在,我想做的是在firebase上的posts / endpoint中,我只想显示当前登录用户的帖子。

其他用户可以通过使用公共布尔变量来阅读其他人的信息(但这将在以后提供)

我一直在研究Firebase的安全API(请参阅:https : //www.firebase.com/docs/security/security-
rules.html
)目前,我具有以下功能:

{
    "rules": {
        "posts": {
            "$post": {
              ".read": "data.child('user_id').val() == auth.id",
              ".write": "(data.child('user_id').val() == auth.id) || (newData.child('user_id').val() == auth.id)"
            }
        }   
    }
}

它在一定程度上有效,只有登录后才能写帖子,但看不到任何帖子!

posts = new Firebase(base + '/posts')
posts = $firebase(posts)

错误是:FIREBASE警告:/ posts的on()或一次()失败:错误:Permission_denied:客户端没有访问所需数据的权限。

如果有人有解决方案,那就太好了!


问题答案:

安全规则不能用作数据过滤器。您不仅可以阅读整个帖子的路径,而且希望仅检索允许查看的记录。取而代之的是,您需要以一种可以读取整个路径的方式来构造数据,或者存储可以查看并分别获取它们的记录的索引。

例如,按组标识或用户标识存储记录:

/posts/$group/data...
/posts/$user/data...

然后,您可以通过将用户分配给适当的组,并简单地获取这些组的消息来确保用户具有权限:

var ref = new Firebase(base + '/posts/' + GROUP_ID);
var posts = $firebaseArray(ref);

或者,您可以为每个用户/组/等可能查看的消息创建索引:

/posts/$post_id/data...
/posts_i_can_view/$user_id/$post_id/true

并分别从主列表中获取它们。诸如Firebase-util之类的工具将使此过程变得更加简单:

var fb = new Firebase(base);
var ref = Firebase.util.NormalizedCollection(
   fb.child('posts_i_can_view/'+USER_ID),
   fb.child('posts')
)
.select('posts.message', 'posts.user_id')
.ref();

var posts = $firebaseArray(ref);

进一步阅读Firebase数据结构:

https://www.firebase.com/docs/web/guide/structuring-data.html


https://www.firebase.com/docs/web/guide/understanding-data.html

https://www.firebase。 com / blog / 2013-04-12-denormalizing-is-
normal.html



 类似资料:
  • 当我试图检索recycleview中保存的数据时,它们显示的是所有用户的数据,而不是登录的用户。有人能帮忙吗?

  • 我需要在Active Directory中找到特定组中的所有用户。我可以查询AD的特定组,我想得到用户,但我无法查询用户的特定组。 以下工作: 上面的查询返回所有类似“test”的广告组。但我该如何从广告群中获取用户列表呢?我特别想列出像“test”这样的所有组中的用户。

  • 我正在尝试删除 Firebase 实时数据库中用户之间的消息。我能够成功删除消息,但我想添加一个条件,即用户无法删除他收到的消息,只能删除他发送的消息,目前用户能够删除他收到的消息以及他从firebase实时数据库中发送的消息。 我的代码 MessageActivity.java MessageAdapter.java 聊天.java

  • 我正在开发一个社交网络应用程序,用户可以关注其他用户,喜欢他们的帖子、评论。。。当某个用户跟踪某人时,它会在另一个用户帐户的通知片段中显示,通知他有一个新的跟踪者。问题是,当用户点击unfollow时,我无法删除通知。以下是我尝试过的: 下面是我添加通知的方式: 我的代码的问题是,每当用户取消关注某人时,该用户的所有通知都会被删除,包括他的喜欢和评论。我想要的是删除“开始关注你”。以下是它在Fir

  • 对于熊猫数据帧的特定列,该列实际上是转换成BCD的16位数据。我只想提取特定行的14-8位并转换为BCD。下面的公式适用于如下的小数据帧。 但当我申请时 对于688126行的较大数据帧,我得到一个错误,说 基数为2的int()的文本无效:“” 错误如下所示 ValueError Traceback(最近调用最后一次)在1 df.LO_TIME_0_J2_0---- C:\ProgramData\A