2017-04-09 106 views
-1

我正在尝试在Firebase中为项目做一个项目。这是我正在做的。我使用的是电子邮件身份验证,当用户使用电子邮件和密码注册时,我的应用程序会获取他的姓名并使用其用户标识添加到Firebase数据库。 这里是火力地堡数据库I设置Firebase规则(被拒绝的权限)

{ 
"rules": { 
"users": { 

    "$uid": { 
     ".read": "auth != null && auth.uid == $uid", 
     ".write": "auth != null && auth.uid == $uid", 
    "items": { 

     "$item_id": { 
     "title": { 
      ".validate": "newData.isString() && newData.val().length > 0" 
     } 
     } 
    }, 
     "user-details":{ 
     "name" : { 
      ".validate" : "newData.isString() && newData.val().length >= 0" 
     } 
     } 
    } 
}, 

"all-public" : { 
    ".read" : "true", 
    ".write" : "true" 
} 
    } 
} 

这里是SWIFT代码我写的。

var dbref = FIRDatabase.database().reference() 
      dbref.child("users").child("\(user?.uid)").child("user-details").child("name").setValue(name) 

      dbref.child("all-public").child((user!.uid)).setValue(name) 

的数据,第二个孩子所有公共添加成功,但它不能添加上面的第一个孩子,说权限被拒绝。 这是它在控制台中所说的。

2017-04-09 20:00:02.145 ToDo App[1573] <Warning> [Firebase/Database][I-RDB03812] setValue: or removeValue: at /users/Optional("klvexHq3GOQ4IiWpOs4WP7H4pmy1")/user-details/name failed: permission_denied 
2017-04-09 20:00:28.426 ToDo App[1573] <Warning> [Firebase/Database][I-RDB03812] Listener at /users/klvexHq3GOQ4IiWpOs4WP7H4pmy1/items failed: permission_denied 

首先,我想这是因为我尚未签署。所以,我想在注册后登录,然后将数据添加到数据库,但仍是同样的错误。 请帮我这个。我真的被困在这里。

回答

3

由于user是可选的,你需要先提取其值:

var dbref = FIRDatabase.database().reference() 
if let uid = user?.uid { 
    dbref.child("users").child("\(uid)").child("user-details/name").setValue(name) 
    dbref.child("all-public").child((uid)).setValue(name) 
} 

Firebase uploading file getting optional string in filename

+0

所以,这不符合我的数据库的权限问题?因为它说权限被拒绝。 –

+2

数据库不允许该操作,因为您的代码无法打开可选值。如果仔细检查错误消息,您会看到它包含'Optional(“klvexHq3GOQ4IiWpOs4WP7H4pmy1”)',它不是用户的UID。 –