限制可以写入的列
Limiting the columns that can be written
我使用 the Firebase Bolt compiler 创建了规则。
{
"rules": {
"users": {
"$user_id": {
".validate": "newData.hasChildren(['settings', 'provider', 'email', 'privilege_type', 'address_city', 'address_state', 'dt_created', 'dt_updated'])",
"settings": {
".validate": "newData.val().length > 0 && newData.val().length < 1000"
....
".read": "auth != null && auth.uid == $user_id",
".write": "auth != null && auth.uid == $user_id"
}
}
}
}
并且我使用 PHP 脚本进行了测试
<?php
require_once ('vendor/autoload.php');
const DEFAULT_URL = 'https://MYAPP.firebaseio.com/';
const DEFAULT_TOKEN = 'MYTOKEN';
const DEFAULT_PATH = '/users';
$firebase = new \Firebase\FirebaseLib(DEFAULT_URL, DEFAULT_TOKEN);
// --- storing an array ---
$test = array(
"foo" => "bar",
"i_love" => "lamp",
"id" => 42
);
$dateTime = new DateTime();
$firebase->set(DEFAULT_PATH . '/' . $dateTime->format('c'), $test);
// --- storing a string ---
$firebase->set(DEFAULT_PATH . '/name/contact001', "John Doe");
// --- reading the stored string ---
$name = $firebase->get(DEFAULT_PATH . '/name/contact001');
var_dump($name);
所以,输入了数据
{
"2015-11-12T12:46:51 01:00" : {
"foo" : "bar",
"i_love" : "lamp",
"id" : 42
},
"2015-11-12T12:48:27 01:00" : {
"foo" : "bar",
"i_love" : "lamp",
"id" : 42
},
"name" : {
"contact001" : "John Doe"
}
}
我的问题(抱歉,如果这是一个愚蠢的问题)。
我正在尝试根据限制的规则(
限制应用程序可以写入的列
".validate": "newData.hasChildren(['settings', 'provider', 'email', 'privilege_type', 'address_city', 'address_state', 'dt_created', 'dt_updated'])"
但是 PHP 脚本可以编写和创建不同的列。
我的错误在哪里?
+1 使用 Bolt!
您的 PHP 服务器需要与您的应用程序不同的权限。
如果您信任您的PHP服务器,您可以在其上存储您的 Firebase 的密钥。然后您可以使用该自定义令牌进行身份验证,它将为您提供对 Firebase 数据库的完全访问权限。
但是,如果您不想要那么大的权力,您可以生成一个自定义令牌,它只具有您指定的某些权限。
查看有关自定义登录的文档。 https://www.firebase.com/docs/web/guide/login/custom.html
我使用 the Firebase Bolt compiler 创建了规则。
{
"rules": {
"users": {
"$user_id": {
".validate": "newData.hasChildren(['settings', 'provider', 'email', 'privilege_type', 'address_city', 'address_state', 'dt_created', 'dt_updated'])",
"settings": {
".validate": "newData.val().length > 0 && newData.val().length < 1000"
....
".read": "auth != null && auth.uid == $user_id",
".write": "auth != null && auth.uid == $user_id"
}
}
}
}
并且我使用 PHP 脚本进行了测试
<?php
require_once ('vendor/autoload.php');
const DEFAULT_URL = 'https://MYAPP.firebaseio.com/';
const DEFAULT_TOKEN = 'MYTOKEN';
const DEFAULT_PATH = '/users';
$firebase = new \Firebase\FirebaseLib(DEFAULT_URL, DEFAULT_TOKEN);
// --- storing an array ---
$test = array(
"foo" => "bar",
"i_love" => "lamp",
"id" => 42
);
$dateTime = new DateTime();
$firebase->set(DEFAULT_PATH . '/' . $dateTime->format('c'), $test);
// --- storing a string ---
$firebase->set(DEFAULT_PATH . '/name/contact001', "John Doe");
// --- reading the stored string ---
$name = $firebase->get(DEFAULT_PATH . '/name/contact001');
var_dump($name);
所以,输入了数据
{
"2015-11-12T12:46:51 01:00" : {
"foo" : "bar",
"i_love" : "lamp",
"id" : 42
},
"2015-11-12T12:48:27 01:00" : {
"foo" : "bar",
"i_love" : "lamp",
"id" : 42
},
"name" : {
"contact001" : "John Doe"
}
}
我的问题(抱歉,如果这是一个愚蠢的问题)。
我正在尝试根据限制的规则(
限制应用程序可以写入的列".validate": "newData.hasChildren(['settings', 'provider', 'email', 'privilege_type', 'address_city', 'address_state', 'dt_created', 'dt_updated'])"
但是 PHP 脚本可以编写和创建不同的列。
我的错误在哪里?
+1 使用 Bolt!
您的 PHP 服务器需要与您的应用程序不同的权限。
如果您信任您的PHP服务器,您可以在其上存储您的 Firebase 的密钥。然后您可以使用该自定义令牌进行身份验证,它将为您提供对 Firebase 数据库的完全访问权限。
但是,如果您不想要那么大的权力,您可以生成一个自定义令牌,它只具有您指定的某些权限。
查看有关自定义登录的文档。 https://www.firebase.com/docs/web/guide/login/custom.html