我想限制对Firebase数据库的访问,以便只有我授权的用户才能对其进行写入。 但是几乎所有提议的解决方案似乎都不适合我。
我的控制台中总是出现401(未经授权)错误。
我尝试了两种检查正确用户是否登录的方法,但是没有一种对我有用。
1。规则中硬编码的uid:
{
"rules": {
".read": true,
".write": "auth.uid === 'UID'")",
}
}
2。数据库中的uid
{
"rules": {
".read": true,
".write": "root.child('users').hasChild(auth.uid)",
}
}
在两种方式中,我都使用了Firebase-Authentication概述中提供的uid。 我使用Google作为登录提供程序。
答案 0 :(得分:1)
这是一个规则的示例,该规则授予已验证的写访问权限
/users/<uid>/
的用户,其中<uid>
是获得的用户ID 通过Firebase身份验证。
修改:
对于通过Firebase身份验证的特定路径和当前获得的用户,这应该有所帮助:
{
"rules": {
"YourSpecificPath": {
"$uid": { // where <uid> is the ID of the user obtained through Firebase Authentication
".write": "$uid === auth.uid"
".read": true,
}
}
}
}
或者直接给uid
:
{
"rules": {
".read": true,
".write": "auth.uid === 'dJrGShfgfd2'"
}
}
答案 1 :(得分:1)
所有代码示例都是正确的
Mohsen的问题和答案中的所有代码片段 工作。 我只是忘了随同我的补丁请求一起发送idToken。
获取idToken的代码:
firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
// Send token to your backend via HTTPS
// ...
}).catch(function(error) {
// Handle error
});
来自:https://firebase.google.com/docs/auth/admin/verify-id-tokens#retrieve_id_tokens_on_clients
使用idToken进行身份验证:
https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>