Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我使用用户电子邮件作为唯一ID时,如何设置firebase规则?_Firebase_Firebase Security - Fatal编程技术网

当我使用用户电子邮件作为唯一ID时,如何设置firebase规则?

当我使用用户电子邮件作为唯一ID时,如何设置firebase规则?,firebase,firebase-security,Firebase,Firebase Security,我正在使用Ionic Framework和Firebase开发一个应用程序。我在Firebase上有以下数据结构: Users { mary@fb,com: { Group: { group123: { Contacts: {email1@gmail.com, email2@gmail.com, etc. } } group456: { Contacts: {email3@gmail.com, email4@gmai

我正在使用Ionic Framework和Firebase开发一个应用程序。我在Firebase上有以下数据结构:

Users {
  mary@fb,com: {
    Group: {
      group123: {
        Contacts: {email1@gmail.com, email2@gmail.com, etc. }
      }
      group456: {
        Contacts: {email3@gmail.com, email4@gmail.com, etc. }
      }
    }
  }
  leo@fb.com: {}
  wayne@fb.com: {}
  etc.
}
应用程序上的用户可以创建群组,并邀请他们的朋友加入群组

我想知道如何给予”email1@gmail.com", "email2@gmail.com“等。访问路径用户/mary@fb,com/Group/group123使用Firebase规则。我也很难给你钱mary@fb,com的读写权限。如何使用下面的规则来使用自定义的唯一ID(如用户的电子邮件)

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

不鼓励使用用户的auth
uid
作为唯一标识符,这可能只会让你伤心。我会重新考虑这种方法,并鼓励其他人不要效仿

假设你无法避免这一点,那么以下几点是必要的:

  • 实现您自己的auth模式
  • 电子邮件
    作为令牌数据的一部分,或者,根据您的使用情况(在问题中分享这一点非常有帮助,请参阅),可能只使用转义的电子邮件作为
    uid
  • 请参阅安全规则中的
    auth.uid
    而不是
    auth.email
因此,在服务器/节点/etc脚本中:

// after some auth process to verify 
// the user and obtain the email
var FirebaseTokenGenerator = require("firebase-token-generator");
var tokenGenerator = new FirebaseTokenGenerator("<YOUR_FIREBASE_SECRET>");
var token = tokenGenerator.createToken({uid: uniqueIdOrMaybeEscapedEmail, email: escapedEmailAddress});
".read": "$user_id === auth.email",