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

时间:2015-04-20 01:26:55

标签: 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@gmail.com, etc. }
      }
    }
  }
  leo@fb.com: {}
  wayne@fb.com: {}
  etc.
}

应用上的用户可以创建群组并邀请他们的朋友加入群组。

我试图找出如何给予" email1@gmail.com"," email2@gmail.com"使用Firebase规则访问路径Users / mary @ fb,com / Group / group123。我也无法给予mary @ fb,com读写权限。如何使用以下规则来使用自定义唯一ID,例如用户的电子邮件?

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

1 个答案:

答案 0 :(得分:3)

应该不鼓励使用用户的身份验证uid作为唯一标识符,并且可能只会让您感到难过。我会重新考虑这种方法,并鼓励其他人不要效仿。

假设你无法避免这种情况,那么下列内容将是必要的:

  • 实施您自己的身份验证架构
  • sign your own tokens
  • 包含email作为令牌数据的一部分,或者,根据您的使用情况(在问题中分享这一点很有帮助,请参阅XY Problem),也许只需使用转发的电子邮件作为uid
  • 在您的安全规则
  • 中引用auth.email代替auth.uid

因此,在server / node / 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",