我使用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。我如何改变我的规则以满足我的需要?
答案 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"
}
}
}
}
这应该解决它