小编Dan*_* P.的帖子

Firebase安全规则:限制只写入此uid,但有几个字段除外

在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_pictureactiveConversationsusers文档.

如何在不必在每个节点上放置读/写规则的情况下实现这一目标?

谢谢

javascript firebase firebase-security firebase-realtime-database

13
推荐指数
1
解决办法
1188
查看次数

Firebase 身份验证:编辑 UID

是否可以以编程方式在 Firebase 中更改用户的 UID?似乎无法在 Firebase 的控制台中手动执行此操作。

javascript firebase

12
推荐指数
2
解决办法
6079
查看次数

onAuthStateChanged不一致

当用户访问我的网站时,我会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更多地发生在移动设备上的用户身上.

javascript firebase firebase-authentication

10
推荐指数
1
解决办法
3937
查看次数

了解Firebase数据库中带宽使用的来源

我的应用程序在Firebase数据库的带宽使用方面正在增长,我正在尝试优化我的查询以使用更少的带宽(从而降低成本),但我是盲目地这样做,因为没有关于我的数据库使用情况的统计数据(我不能知道哪些查询占用的带宽最多).

有没有办法知道哪些查询占用了大量带宽?您如何优化Firebase数据库的使用?

编辑:

我有一个聊天网站,我使用的观察者如 messagesRef.child(conversationID).limitToLast(25).on('child_??added'... conversationsRef.child(conversationID).('participants').on('value'...

firebase firebase-realtime-database

10
推荐指数
1
解决办法
1090
查看次数

MySQL插入错误:ER_BAD_FIELD_ERROR:'字段列表'中的未知列'2525'

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)

mysql sql

7
推荐指数
1
解决办法
3万
查看次数

Firebase查询:排除特定字段为null的数据

我有一个查询,它在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)

firebase firebase-realtime-database

3
推荐指数
1
解决办法
1697
查看次数

原型JavaScript - 使用构造函数的函数

我有这个代码:

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)

我仍然在控制台中收到该错误.我以为所有对象都会继承原型函数.

javascript

2
推荐指数
1
解决办法
44
查看次数

Express + CloudFlare 与 SSL

我有一个使用新创建的 Express 应用程序express appName。我已将端口更改为 443。该域位于启用了 SSL 的 CloudFlare 代理下。不过,当我访问该网站时,我看到的是 CloudFlare 页面,Web server is down而不是看到快速索引页面。

如何使 Express 与 CloudFlare 的 SSL 配合使用?

ssl node.js express cloudflare

1
推荐指数
1
解决办法
7217
查看次数

1 查询批量更新用户数组使用 PDO

我目前正在遍历一个数组以一次更新一行,例如:

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 个查询,或以任何方式进行优化?

php mysql pdo

1
推荐指数
1
解决办法
1160
查看次数

使用 Web Audio API 将节点相互连接

我正在尝试用我的音频做几件事:

  • 增加/减少音频的整体音量。
  • 增加/减少特定通道的音量和延迟(左)。

我有这个代码:

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)

html javascript web-audio-api

1
推荐指数
1
解决办法
831
查看次数

node.js node-mysql查询不起作用

查询数据库时,我收到此错误:

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)

node.js node-mysql

0
推荐指数
1
解决办法
7467
查看次数