在Firebase中,我有一个users"节点",它看起来像:
users: {
someUid: {
username: 'someUsername'
activeConversations: {},
profile_picture: ''
... lots of other children
},
...
},
anotherNode: {
},
... hundreds of other nodes
Run Code Online (Sandbox Code Playgroud)
我的规则现在:
{
"rules": {
".read": true,
".write": true,
"users": {
".indexOn": [
"username"
]
},
"friendRequests": {
".indexOn": [
"timeSent"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是将孩子在users"节点"中的访问权限仅限于拥有孩子的客户.因此,例如,someUid孩子只能由客户使用uid编写someUid.其他"节点" anotherNode可以由任何登录的客户端写入/读取.此外,任何登录客户端应能写profile_picture并activeConversations在users文档.
如何在不必在每个节点上放置读/写规则的情况下实现这一目标?
谢谢
javascript firebase firebase-security firebase-realtime-database
是否可以以编程方式在 Firebase 中更改用户的 UID?似乎无法在 Firebase 的控制台中手动执行此操作。
当用户访问我的网站时,我会onAuthStateChanged用来确定用户是否已经从之前的会话登录.
主要问题是它与少数用户不一致 - 代码似乎没有检测到他们确实有一个有效的登录会话.
以下代码位于应用程序本身,用户在主页或登录页面重定向后位于该页面上.
该网站的主页还用于onAuthStateChanged确定是否应该直接将用户重定向到该应用程序.登录页面使用signInWithEmailAndPassword,当登录成功时,将它们重定向到应用程序页面(具有以下代码).
firebase.auth().onAuthStateChanged(function (authUser) {
if (authUser) return initApp(authUser);
// issue: sometimes users that *should* be signed-in get signed in anonymously here
firebase.auth().signInAnonymously().then(function (authUser) {
initApp(authUser);
}
});
Run Code Online (Sandbox Code Playgroud)
是onAuthStateChanged不是我应该用于我的用例?知道如何改进/解决这个问题吗?
编辑:此SEEMS更多地发生在移动设备上的用户身上.
我的应用程序在Firebase数据库的带宽使用方面正在增长,我正在尝试优化我的查询以使用更少的带宽(从而降低成本),但我是盲目地这样做,因为没有关于我的数据库使用情况的统计数据(我不能知道哪些查询占用的带宽最多).
有没有办法知道哪些查询占用了大量带宽?您如何优化Firebase数据库的使用?
编辑:
我有一个聊天网站,我使用的观察者如 messagesRef.child(conversationID).limitToLast(25).on('child_??added'...
conversationsRef.child(conversationID).('participants').on('value'...
var convID = 2525;
var contactUsername = 'blabla';
var userId = 100;
var contactId = 200;
var sql = "INSERT INTO contacts (FK_OWNERID, FK_USERID, FC_CONTACTNAME, `CONVERSATION_ID`)
VALUES (" + mysql.escape(userId) + "," + mysql.escape(contactId) + "," + mysql.escape(contactUsername) + "," + convID + "),
(" + mysql.escape(contactId) + "," + mysql.escape(userId) + "," + mysql.escape(username) + "," + convID + ")";
Run Code Online (Sandbox Code Playgroud)
`错误:ER_BAD_FIELD_ERROR:'字段列表'中的未知列'2525'字段对于CONVERSATION_ID和FC_CONTACTNAME都是varchar(32),对于其他2个字段是int.
这个查询出了什么问题?我甚至把反引号放在一边CONVERSATION_ID,它认为convID变量是一个列......
编辑:
如果我的查询就是这样,那么它的工作原理如下:
var sql = "INSERT INTO contacts (`FK_OWNERID`, `FK_USERID`, `FC_CONTACTNAME`)
VALUES (" …Run Code Online (Sandbox Code Playgroud) 我有一个查询,它在last_visit字段上使用startAt(1周前)和endAt(现在)在2个日期之间获取数据。
然后,我遍历结果以丢弃没有个人资料图片的用户。
问题是大约有20%的用户拥有个人资料图片,因此仅要使100位用户拥有个人资料图片,我就必须至少查询500个人(我使用limitToLast(500))。
通过某种方式在SQL中指定类似的内容,我可以使查询效率更高:WHERE profile_picture IS NOT NULL吗?
如果可能的话,如果可以只允许那些拥有个人资料图片集的用户,我也可以仅使用limitToLast(100)。
数据库看起来像:
users: {
{user_uid}: {
profile_picture: null,
last_visit: 123456789
}
{user_uid}: {
profile_picture: 'example.com/pic.png',
last_visit: 123456789
}
}
Run Code Online (Sandbox Code Playgroud) 我有这个代码:
function user(name) {
console.log(name);
}
user.prototype.test = function() {
return 2 + 2;
};
console.log(user.prototype.test());
var dany = new user("dany");
var david = new user("david");
console.log(dany.prototype.test());
Run Code Online (Sandbox Code Playgroud)
控制台日志:
4
dany
david
Uncaught TypeError: Cannot call method 'test' of undefined
Run Code Online (Sandbox Code Playgroud)
不应该将test()函数分配给user()函数的所有实例(它是对象构造函数)吗?
如果您碰巧对我应该阅读的内容有更好的建议,请更多地了解原型,请继续;)
编辑:
即使使用:
Object.prototype.test = function() {
return 2 + 2;
};
Run Code Online (Sandbox Code Playgroud)
我仍然在控制台中收到该错误.我以为所有对象都会继承原型函数.
我有一个使用新创建的 Express 应用程序express appName。我已将端口更改为 443。该域位于启用了 SSL 的 CloudFlare 代理下。不过,当我访问该网站时,我看到的是 CloudFlare 页面,Web server is down而不是看到快速索引页面。
如何使 Express 与 CloudFlare 的 SSL 配合使用?
我目前正在遍历一个数组以一次更新一行,例如:
for ($i = 0; $i < count($users); $i++) {
$query = "UPDATE users SET name = :name WHERE id = :id";
$statement = $pdo_conn->prepare($query);
$result = $statement->execute('name' => $users[$i]['name'], 'id' => $users[$i]['id']);
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以进行这 1 个查询,或以任何方式进行优化?
我正在尝试用我的音频做几件事:
我有这个代码:
var audioContext = window.AudioContext || window.webkitAudioContext,
context = new audioContext(),
sourceNode = context.createMediaElementSource(document.getElementById('audio'));
// Nodes to control the left channel
var channelSplitterNode = context.createChannelSplitter(1);
var leftChannelGainNode = context.createGain();
leftChannelGainNode.gain.value = 1.10;
channelSplitterNode.connect(leftChannelGainNode, 0);
var leftChannelDelayNode = context.createDelay();
leftChannelDelayNode.delayTime.value = 0.10;
channelSplitterNode.connect(leftChannelDelayNode, 0);
// Node to control the track's overall volume
var volumeGainNode = context.createGain();
// I think this might be where I mess up
sourceNode.connect(leftChannelGainNode);
sourceNode.connect(leftChannelDelayNode);
sourceNode.connect(volumeGainNode);
volumeGainNode.connect(context.destination);
// Change gain at any time like so …Run Code Online (Sandbox Code Playgroud) 查询数据库时,我收到此错误:
TypeError: Cannot call method 'query' of undefined
at Object.<anonymous> (/home/nodeuser/myapp_node/index.js:51:17)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像:
var mysql = require('mysql');
var mysqlConnection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'carousel',
debug : true,
}).connect(function(err) {
if ( !err ) {
console.log("Connected to MySQL");
} else if ( err ) {
console.log(err);
}
});
var userId = 23
mysqlConnection.query('SELECT …Run Code Online (Sandbox Code Playgroud) firebase ×5
javascript ×5
mysql ×2
node.js ×2
cloudflare ×1
express ×1
html ×1
node-mysql ×1
pdo ×1
php ×1
sql ×1
ssl ×1