创建用户时,Firebase安全规则不允许

时间:2015-11-24 09:03:29

标签: firebase firebase-security firebase-authentication

我使用Firebase $authWithPassword方法进行用户登录。我使用$createUser方法为我的用户创建注册,并在成功时更新我/ users / path上的条目以保存用户名,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": true".write": true,则注册将有效,但任何人都可以查看我的用户数据,包括我不想发生的uid和电子邮件ID。我如何改变我的规则以满足我的需要?

这就是我的用户表的样子 enter image description here 任何帮助表示赞赏。 感谢。

2 个答案:

答案 0 :(得分: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相匹配。

答案 1 :(得分:-3)

是的,你需要将规则改为这样的

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

这应该解决它