使用具有以下规则的Firebase实时数据库:
{
"rules": {
"messages": {
".read": "auth != null",
".write": "auth != null"
}
}
}
而且,将此触发器定义为:
exports.localOnCreate = functions.database.ref('/messages/{messageId}')
.onCreate((snap, context) => {
console.log(context);
});
当我在测试网站(通过Google验证)上运行此代码时:
firebase.database().ref('/messages').push().set({
'hi': 'from-web'
}).then( function(result) {
console.log(result);
...
})
我在Firebase控制台功能日志中看到了这一点:
{
eventId: '............',
timestamp: '2018-07-27T20:51:50.943Z',
eventType: 'google.firebase.database.ref.create',
resource: {
service: 'firebaseio.com',
name: 'projects/_/instances/..../refs/messages/-LISVklGLfbcfrFvnylZ'
},
authType: 'UNAUTHENTICATED',
auth: null,
params: {
messageId: '-LISVklGLfbcfrFvnylZ'
}
}
如果我已在Web应用程序中通过身份验证,为什么在触发器“上下文”(第二个)参数中得到 authType:'UNAUTHENTICATED'和 auth:null ?
而且,正如我在CloudFunction reference中看到的那样,此函数应该只接收一个参数,即Event对象,但是似乎不是Realtime Database triggers中所见的情况,也不是根据我的测试。最后的冲突使我完全困惑。任何澄清将不胜感激。
答案 0 :(得分:0)
嘿,@ RodrigoMata和@claytronicon,这是一个错误。我创建了一个github问题,他们推出了新版本v2.0.4,其中包含RTDB事件中authType的修复程序。 IntelliJ Code Coverage docs