簡體   English   中英

有什么方法可以從角度組件使用 onCall Firebase 函數?

[英]There is any way to use onCall Firebase functions from an angular component?

我知道可以使用functions.https.onRequest 或functions.https.onCall 調用firebase 雲函數,但是我找不到關於如何使用角度模塊中的“onCall”的示例,我找到的示例是僅適用於 http 請求角度模塊。

例子:

import { Component } from '@angular/core';
import { AngularFireDatabase } from 'angularfire2/database';
import * as firebase from 'firebase/app';

import { Http, Headers } from '@angular/http';
import 'rxjs/add/operator/toPromise';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})

export class AppComponent {


  constructor(private db: AngularFireDatabase, private http: Http) { }

  postRequest() {
    const url = 'https://your-firebase-project.cloudfunctions.net/secureEndpoint';

    firebase.auth().currentUser.getIdToken()
            .then(authToken => {
              const headers = new Headers({'Authorization': 'Bearer ' + authToken });

              const myUID    = { uid: 'current-user-uid' };    // success 200 response
              const notMyUID = { uid: 'some-other-user-uid' }; // error 403 response

              return this.http.post(url, myUID, { headers: headers }).toPromise()
            })
            .then(res => console.log(res))
    }

}

有什么方法可以在角度模塊上使用 JS 標准調用?

<script src="https://www.gstatic.com/firebasejs/5.4.1/firebase-functions.js"></script>
firebase.functions().httpsCallable('FUNCTION');

我感謝你們的指導,在正確的地方,我只是以這種方式使用導入:

import * as firebase from 'firebase';

然后只調用函數。

這將導入組件中的所有庫:

import * as firebase from 'firebase';

要僅導入功能 ,請使用:

import * as firebase from 'firebase/app';
import 'firebase/functions';

請檢查以下鏈接https://angularfirebase.com/snippets/trigger-http-cloud-functions-from-an-angular-component/

如果創建了oncall請求,則以這種方式調用cloud函數。

從這里獲取Cors套餐

https://www.npmjs.com/package/cors

您的雲功能:

import * as functions from 'firebase-functions';
const email = require("emailjs/email");
const cors = require('cors')({origin: true});

exports.sendMailFunction = functions.https.onRequest((request, response) => {
    cors(request, response, () => {  
        // *Your code*

        });

  });

您的Cloud網址可以是: https://us-central1-<projectid>.cloudfunctions.net/sendMailFunction

您的組件函數,將在單擊或您喜歡的任何事件時調用

sendEmail() {

    let url = `https://your-cloud-function-url/function`
    let params: URLSearchParams = new URLSearchParams();
    let headers = new Headers({'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' });

    params.set('to', 'user@example.com');
    params.set('from', 'you@yoursupercoolapp.com');
    params.set('subject', 'test-email');
    params.set('content', 'Hello World');

    return this.http.post(url, params, headers)
                    .toPromise()
                    .then( res => {
                      console.log(res)
                    })
                    .catch(err => {
                      console.log(err)
                    })

  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM