小编Jer*_*rry的帖子

Firebase数据库规则允许更新但阻止创建

如何使用"允许更新但不允许添加新记录"来设置数据库规则?

我尝试在下面模拟,但不起作用..

我的数据:

{
  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)

请指教.

firebase firebase-realtime-database firebase-security-rules

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

打字稿错误:'HTMLElement'类型中不存在属性'文件'

我希望使用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'.

我是以错误的方式做到的,还是必须以打字稿的不同方式完成?

谢谢.

typescript ionic-framework angular

7
推荐指数
2
解决办法
5352
查看次数

其他文件的Firebase函数导入功能-javascript

我正在用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将具有多个功能。

javascript firebase google-cloud-functions

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

Firebase功能部署问题:%RESOURCE_DIR%中找不到package.json

我遇到部署Firebase云功能的问题.

重现步骤

  • firebase init
  • 仅选择功能
  • 选择Firebase项目
  • 选择Javascript
  • 使用ESLint
  • 现在用npm安装依赖项
  • 运行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)

node.js npm firebase google-cloud-functions firebase-cli

5
推荐指数
2
解决办法
3234
查看次数

npm i 期间出错:node-pre-gyp install --fallback-to-build --library=static_library

我知道我不应该只是提出这样的问题并希望我能提供更多信息,但我真的不知道它是什么,这也是我第一次遇到这样的问题(更换新笔记本电脑后),我想目前我只能提供错误消息,直到有人要求我提供更多信息..

以下是运行 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)

node.js npm ionic-framework npm-install node-pre-gyp

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

使用nodejs在多个文件中初始化firebase应用程序

我想在多个文件中初始化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)

javascript node.js firebase google-cloud-functions

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

NodeJS tls.connect() getPeerCertificate() 返回错误(多)但浏览器显示正常

我正在构建一个 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)

ssl node.js tls1.2

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

使用firebase实时数据库创建搜索功能

我想使用 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 的用法。

firebase angularfire firebase-realtime-database

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

Firebase onWrite触发器的云函数:snapshot.val不是函数

我在同一个index.js文件,这是创建一些功能sendEmail,sendEmailByDbStatusChangesendEmailConfirmation.

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

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

订阅在promise Angular 6中放置的http.post

当我将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电子邮件。

没有承诺,我可以这样订阅 …

javascript observable rxjs firebase-authentication angular

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