【发布时间】:2016-06-04 12:57:22
【问题描述】:
我正在创建一个注册 Web 表单来创建用户并使用 UID 存储信息。当我尝试创建用户数据时,我收到了FIREBASE WARNING: set at /User/4FzbgqXVX8NlbB0pBkDdJeZ9HHe2 failed: permission_denied。
我的 firebase 数据库规则如下。希望确保这些数据并非对所有用户都可用,除了管理员和用户自己
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
创建用户和写入数据的函数如下
<script>
function createUser() {
var Result = "true";
var textUser = document.getElementById('userName').value;
var textPassword = document.getElementById('userPassword').value;
var textAccountID = document.getElementById('accountRef').value;
var textDateCreated = document.getElementById('dateCreated').value;
var textDisplayName = document.getElementById('displayName').value;
var UID;
firebase.auth().createUserWithEmailAndPassword(textUser, textPassword).then(function(user){
console.log('uid',user.uid);//Here if you want you can sign in the user
UID = user.uid;
writeUserData(UID, textDisplayName, textAccountID, textDateCreated);
}).catch(function(error) {
//Handle error
var errorCode = error.code;
var errorMessage = error.message;
return Result = "false";
});
return Result;
}
function writeUserData(userId, displayName, accountID, dateCreated) {
firebase.database().ref('User/' + userId).set({
userId:{
AccountID: accountID,
Created: dateCreated,
Name: displayName}
});
firebase.auth().signOut().then(function() {
// Sign-out successful.
}, function(error) {
// An error happened.
});
}
</script>
有没有人知道如何解决上述问题?
更新
我已将请求的节点更改为这样的用户
firebase.database().ref('users/' + userId).set({
firebase.database().ref('/users/' + userId).set({
firebase.database().ref('/users' + userId).set({
我的规则是这样的
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
但是我仍然收到以下与权限有关的错误消息
FIREBASE WARNING: set at /users/bgzolYFgEgY29WYsNEI0vyULXp13 failed: permission_denied
我还尝试将规则更改回默认规则,如下所示 ,但是我仍然获得许可被拒绝
// These rules require authentication
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
【问题讨论】:
-
在您的参考中,您使用的是路径“User/”,而在您的规则中,您使用的是“/users”,这些将被视为不同的路径
-
请在标记时更加准确。您的问题使用 JavaScript 并且未提及 Android,因此应将其标记为此类。我现在将对其进行更改,但为了提高您获得答案的机会,最好立即正确标记。
-
顺便说一句@Ymmanuel。我将投票关闭作为一个错字。
-
对不起@FrankvanPuffelen,我的错。我当时正在编写 android 等价物,并错误地标记了它。我也更新了我的问题,因为我仍然收到权限错误
标签: javascript firebase firebase-authentication