如何使用"允许更新但不允许添加新记录"来设置数据库规则?
我尝试在下面模拟,但不起作用..
我的数据:
{
users:{
-randomID001:{
email:user@email.com,
status:active
},
-randomID002:{
email:user2@email.com,
status:inactive
}
}
}
Run Code Online (Sandbox Code Playgroud)
在控制台中模拟:
{
"rules": {
".read": "auth != null",
"users":{
".indexOn": "email",
".write":"!newData.exists() && data.exists()"
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果新记录不存在且现有记录存在,这行代码显示允许写入的意思?
".write":"!newData.exists() && data.exists()"
Run Code Online (Sandbox Code Playgroud)
以下是我提交的测试数据:
{
"randomID001":{"status":"inactive"}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Simulated update denied
Run Code Online (Sandbox Code Playgroud)
请指教.
我希望使用IONIC为我的应用程序创建上传功能.
这是我的HTML代码:
<input ion-button block type="file" id="uploadBR">
<input ion-button block type="file" id="uploadIC">
<button ion-button block (click)="upload()">Confirm Claim Restaurant</button>
Run Code Online (Sandbox Code Playgroud)
这是我的upload()功能:
upload(){
let BR = document.getElementById('uploadBR').files[0]
let IC = document.getElementById('uploadIC').files[0]
console.log(BR)
console.log(IC)
}
Run Code Online (Sandbox Code Playgroud)
在普通的HTML中它应该可以工作,但它不适用于我的IONIC.
构建应用程序时,它将显示错误 Typescript Error: Property 'files' does not exist on type 'HTMLElement'.
我是以错误的方式做到的,还是必须以打字稿的不同方式完成?
谢谢.
我正在用javascript构建firebase函数。现在我有很多调用函数,并且我计划将这些函数移到不同的文件中,以避免index.js变得非常混乱。
因此,下面是当前文件结构:
/functions
|--index.js
|--internalFunctions.js
|--package.json
|--package-lock.json
|--.eslintrc.json
Run Code Online (Sandbox Code Playgroud)
我想知道:
1)如何从internalFunctions.js导出函数并将其导入到index.js。
2)如何从index.js调用internalFunctions.js函数。
我的代码是用JavaScript编写的。
已编辑
internalFunction.js将具有多个功能。
我遇到部署Firebase云功能的问题.
重现步骤
预期结果
期望使用firebase-tools来部署云功能.
实际结果
收到以下错误消息:
? firebase deploy
=== Deploying to '<projects>'...
i deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run lint
npm ERR! path ...path\firebaseFunction\%RESOURCE_DIR%\package.json
npm ERR! code ENOENT
npm ERR! errno -4058
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open '...path\firebaseFunction\%RESOURCE_DIR%\package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete …Run Code Online (Sandbox Code Playgroud) 我知道我不应该只是提出这样的问题并希望我能提供更多信息,但我真的不知道它是什么,这也是我第一次遇到这样的问题(更换新笔记本电脑后),我想目前我只能提供错误消息,直到有人要求我提供更多信息..
以下是运行 npm i 时我的cmder 中显示的错误
D:\ADA\Projects\foodNinjaCustomerApp (Jerry-Dev2 -> origin)
? npm i
> grpc@1.10.0 install D:\ADA\Projects\foodNinjaCustomerApp\node_modules\grpc
> node-pre-gyp install --fallback-to-build --library=static_library
node-pre-gyp ERR! Tried to download(403): https://storage.googleapis.com/grpc-p
recompiled-binaries/node/grpc/v1.10.0/node-v64-win32-x64-unknown.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for grpc@1.10.0 and node@10.5.0
(node-v64 ABI, unknown) (falling back to source compile with node-gyp)
node-pre-gyp ERR! Tried to download(undefined): https://storage.googleapis.com/
grpc-precompiled-binaries/node/grpc/v1.10.0/node-v64-win32-x64-unknown.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for grpc@1.10.0 and node@10.5.0
(node-v64 ABI, unknown) (falling back to source compile with node-gyp)
gypgyp ERR! ERR!configure error …Run Code Online (Sandbox Code Playgroud) 我想在多个文件中初始化Firebase应用程序以正确组织我的方法,但我不确定哪种方法是最好的。
下面是文件系统结构:
/functions
|-keys
|-methods
| |-email.js
| |-logger.js
|-node_modules
|-index.js
|-package.json
|-package-lock.json
Run Code Online (Sandbox Code Playgroud)
在我的 index.js 中,我初始化了 2 个项目,其中 1 个用于生产,另一个用于 OTE。:
const functions = require('firebase-functions');
var firebaseAdmin = require('firebase-admin');
var productionServiceAccount = require('./keys/production-key.json');
var oteServiceAccount = require("./keys/ote-key.json");
var prodServer = firebaseAdmin.initializeApp({
credential: firebaseAdmin.credential.cert(productionServiceAccount),
databaseURL: 'https://production-panel.firebaseio.com'
}, "prod");
var oteServer = firebaseAdmin.initializeApp({
credential: firebaseAdmin.credential.cert(oteServiceAccount),
databaseURL: "https://ote-panel.firebaseio.com"
}, "ote");
console.log("prodServer: ", prodServer.name, "oteServer: ", oteServer.name)
var mailer = require('./methods/email.js') //import code from method folder
var logger = require('./methods/logger.js') //import code …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 SSL 爬虫应用程序,其中用户传入域名,NodeJS 使用tls库来检索 SSL 证书。
首先,这是我的代码:
server.js
const tls = require('tls');
var rootCas = require('ssl-root-cas/latest').create();
const fs = require('fs');
fs.readdirSync('./keys/intermediate_certs').forEach(file => {
rootCas.addFile('./keys/intermediate_certs/' + file)
});
var secureContext = tls.createSecureContext({
ca: rootCas
});
options = {
host: host, //domain like google.com
port: 443,
secureContext: secureContext,
ca: rootCas,
rejectUnauthorized: true
};
var tlsSocket = tls.connect(options, function () {
let rawCert = tlsSocket.getPeerCertificate()
console.log(rawCert)
})
tlsSocket.on('error', (error) => {
console.log(error)
// [ERR_TLS_CERT_ALTNAME_INVALID] Hostname/IP does not match certificate's altnames: Host: …Run Code Online (Sandbox Code Playgroud) 我想使用 firebase 实时数据库为我的应用程序创建一个搜索功能,类似于 facebook 搜索。
我做了一些研究并承认 Firebase 实时无法使用“文本包含”进行搜索。但我相信必须有某种方法来实现它,例如组合 startAt 或 endAt。
我需要一些关于最佳实践的建议。
数据库结构将如下所示:
Restaurant
-->RandomID
---->name: 'Good Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'Dixon Lee Restaurant'
---->address:
---->desc:
-->RandomID
---->name: 'MCD'
---->address:
---->desc:
Run Code Online (Sandbox Code Playgroud)
编辑 我不确定 startAt 和 endAt 如何工作。如果我使用 startAt(3) 是否应该返回 3 及以上?如果我将 startAt 与字符串一起使用会怎样?就像我遇到的下面的问题:
firebase.database().ref('/restaurants').orderByChild('name').startAt('Good').on('value',snap=>{
console.log(snap.val())
})
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用 startAt/endAt 实现“文本包含”,它将找到以关键字开头/结尾的字段的特定值。不确定这是否是 startAt/endAt 的用法。
我在同一个index.js文件,这是创建一些功能sendEmail,sendEmailByDbStatusChange和sendEmailConfirmation.
sendEmail- 通过HTTP/API进行呼叫
sendEmailByDbStatusChange - 在更改值时侦听DB,但操作是硬编码的
sendEmailConfirmation- 在更改值时列出DB,操作以快照为准.
以下是我的代码:
const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const mailTransport = nodemailer.createTransport({
service: 'gmail',
auth: {
user: gmailEmail,
pass: gmailPassword,
},
});
// Sends an email confirmation when a user changes his mailing list subscription.
exports.sendEmail = functions.https.onRequest((req, res) => {
if (req.body.subject === undefined || req.body.recipient === undefined) {
// This is an error …Run Code Online (Sandbox Code Playgroud) javascript firebase firebase-realtime-database google-cloud-functions
当我将promise与subscribe和另一个异步任务混合在一起时,这对我来说变得很复杂。
这是我的身份验证服务:
getCurrentUserToken(){
return new Promise((resolve,reject)=>{
firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
resolve(idToken)
}).catch(function(error) {
reject(error)
});
})
}
Run Code Online (Sandbox Code Playgroud)
这是我的http服务:
sendEmail(email) {
return this.authService.getCurrentUserToken().then(token => {
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Basic server-Password',
})
};
let data = email
data['idToken'] = token
return this.http.post(this.apiServer + 'sendEmail', data, httpOptions)
})
}
Run Code Online (Sandbox Code Playgroud)
这就是我sendEmail(email)在组件上调用函数的方式:
Observable.fromPromise(this.httpService.sendEmail(element)).subscribe(
data3 => {
console.log(data3)
}, error => {
console.log(error)
}
))
Run Code Online (Sandbox Code Playgroud)
我必须将currentUserToken传递给API,以使API验证用户会话,但两者均getCurrentUserToken() sendEmail()以异步方式运行,因此我必须使用Promise传递Tokento sendEmail()函数,并让sendEmail函数调用API来发送API电子邮件。
没有承诺,我可以这样订阅 …
firebase ×6
javascript ×4
node.js ×4
angular ×2
npm ×2
angularfire ×1
firebase-cli ×1
node-pre-gyp ×1
npm-install ×1
observable ×1
rxjs ×1
ssl ×1
tls1.2 ×1
typescript ×1