8

我使用 Firebase$authWithPassword方法进行用户登录。我使用该$createUser方法为我的用户创建注册,并在成功后更新我的 /users/ 路径上的条目以保存用户名、uid 和其他一些详细信息。这是代码

var myDataRef = new Firebase(baseURL + 'datalog/');
var refObj = $firebaseAuth(myDataRef);

refObj.$createUser({
    email: $scope.emailId,
    password: $scope.password
}).then(function(userData) {
    var UserUniqueUrl = new Firebase(baseURL + 'users/' + userData.uid + '/');
    UserUniqueUrl.set({
        'email': $scope.emailId,
        'username': $scope.username,
        'uid': userData.uid,
        'theme': 'default'
    }, function(error) {
        if (error) {
            console.log(error);
        } else {
            console.log('Successfully updated in user table');
        }
    });
}).catch(function(error) {
    if (error.code == 'EMAIL_TAKEN') {
        $scope.regStatusError = 'Email already registered!';
    } else {
        $scope.regStatusError = 'Unable to register! Try again later.';
    }
});

这是我的安全规则

{
    "rules": {
        "users": {
            ".read": "auth != null",
            ".write": "auth != null"
        }
    }
}

现在,如果我尝试注册它会给我权限被拒绝错误,我确定这是因为安全规则".read": "auth != null"".write": "auth != null". 如果我将规则更改为".read": trueand ".write": true,注册将起作用,但任何人都可以看到我的用户数据,包括我不希望发生的 uid 和电子邮件 id。如何更改我的规则以适应我的需要?

这就是我的用户表的样子 在此处输入图像描述 感谢任何帮助。谢谢。

4

2 回答 2

0

您只需要在用户通过身份验证时才允许在您的 firestore 数据库中创建用户:

match /users/{uid} {
          allow create: if request.auth.uid != null;
} 

但是,您可以通过以下方式验证用户的电子邮件:

match /users/{uid} {
          allow create: if request.auth.uid != null
              && request.auth.token.email_verified == true
}

请注意,uid 将与您的文档 ID 相匹配。

于 2020-10-18T06:42:45.290 回答
-3

是的,你需要把你的规则改成这样

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

这应该解决它

于 2016-06-18T20:40:39.050 回答