2

我正在开发一个使用 Firebase 作为后端的应用程序。我有一个使用 Firebase 的 GitHub 身份验证的工作实现。但是,我想将我的完整应用程序(所有读/写操作)限制为特定 GitHub 组织中的人员。

据我所知,这是通过在 Forge 中添加安全规则来完成的。但是,用户的组织不是 GitHub 提供给 Firebase 以供使用的“基本身份验证数据”的一部分。我有什么方法可以让应用程序只对特定组织的成员可用?

当前代码:

var FB = new Firebase('https://XXXXX.firebaseio.com');
var auth = new FirebaseSimpleLogin(FB, function(error, user){
  if(user==null){
    auth.login('github',{rememberMe:true});
  }
  else{
    //We are logged in
    $.getJSON("https://api.github.com/user/orgs?access_token="+user.accessToken+"&callback=?", function(data){
      var orgs = data.data.map(function(org){return org.login});
      if(orgs.indexOf(config.github_org)>-1){
        //Public Member of Chosen Github Org
        //Now we fetch the data and render it
      }
      else{
        //Throw them out
        alert("Join the group "+config.github_org+" on GitHub to get access to Eon");
        document.location="https://github.com/"+config.github_org;
      }
    })
  }
});
4

1 回答 1

1

要使用 FB 安全规则,您需要将auth数据与 Firebase 中的某些内容(如组织列表)进行比较,但看起来您每次都在尝试获取这些数据。相反,我建议users在您的 Firebase 中保留一个由他们组织的集合,这些集合auth.uid具有您可以检查的组织列表:

users
  uid1
  ...
  uidX
    orgs
      org1
      ...
      orgX

因此,当用户尝试访问给定的orgX内容时,您可以检查您的安全规则中是否root.child('users').child(auth.uid).child('orgs/orgX')存在。

于 2013-10-30T13:32:08.000 回答