Firebase 读取在我使用密码登录时返回permission_denied



我得到permission_denied当我试图读取用户映射数据与"身份验证密码",但我能够阅读,如果我与我的领英登录。我想知道我做错了什么?

这是我的数据和规则结构:

//Firebase Data
user-mappings: {
  linkedin: {
    MyLikedinID: {
      user: {
        uid: "simplelogin:1"
      }
    }
  }
}
//Firebase Rules
"user-mappings": {
  "linkedin": {
    "$linkedin_uid": {
      ".read": "auth !== null && (
        (auth.provider === 'linkedin' && auth.id === $linkedin_uid) ||
        (auth.uid === data.child('user/uid').val())
      )",
      ".write": "true"
    }
  }
}

基本上,当我用电子邮件和密码登录时,我试图访问"用户映射/linkedin/$linkedin_uid"数据。

我的代码是:

//Login
auth.$authWithPassword(user).then(function(authDataResult) {
  //Some code here
}).catch(function(error) {
  //Some code here
});
//Get user-mappings
var objRef = self.getRef('/user-mappings/linkedin/MyLinkedinID');
var obj = $firebaseObject(objRef);
obj.$loaded().then(function(data) {
  //When I do this, I gor the permission_denied error
});

这仍然不完全清楚,但我的猜测是您试图在用户身份验证之前加载数据。如果是这种情况,通常通过添加一些日志记录来查看发生了什么是最容易的:

//Login
console.log('starting auth');
auth.$authWithPassword(user).then(function(authDataResult) {
  console.log('authenticated');
  //Some code here
}).catch(function(error) {
  //Some code here
});
//Get user-mappings
console.log('getting user mappings');
var objRef = self.getRef('/user-mappings/linkedin/MyLinkedinID');
var obj = $firebaseObject(objRef);
obj.$loaded().then(function(data) {
  console.log('user mappings gotten');
  //When I do this, I got the permission_denied error
});

如果我猜对了,你的输出将是这个顺序:

starting auth
getting user mappings
user mappings gotten
authenticated

因此,在用户身份验证完成之前就开始加载用户映射。这是因为用户身份验证以异步方式进行

要解决这个问题,你应该将任何需要用户身份验证的代码移到承诺中,当用户身份验证完成时解决:

//Login
console.log('starting auth');
auth.$authWithPassword(user).then(function(authDataResult) {
  console.log('authenticated');
  //Get user-mappings
  console.log('getting user mappings');
  var objRef = self.getRef('/user-mappings/linkedin/MyLinkedinID');
  var obj = $firebaseObject(objRef);
  obj.$loaded().then(function(data) {
    console.log('user mappings gotten');
    //When I do this, I got the permission_denied error
  });
  //Some code here
}).catch(function(error) {
  //Some code here
});

相关内容

  • 没有找到相关文章

最新更新