1

申し訳ありませんが、Jennifer Person's videosの7つのすべてを見て、documentationを読んでチュートリアルを完了しましたが、まだ私の機能を書く方法はわかりません。私はこのCURLスクリプトで得られたIBMワトソン音声テキストトークンを取得する機能、書き込みしようとしています:Firebase CloudユーザサインイントリガでHTTPリクエストを送信する機能はありますか?

curl -X GET --user username:password --output token 
"https://stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api" 

Ieは、URLにHTTP GETリクエストを送信するユーザー名を提供するとパスワードを入力し、ファイル/javascript/services/tokenに出力を書き込みます。

これは私の推測です。認証トリガーはNodejs HTTP GET要求とNodeJsファイルをラップしますfs.writefile

const functions = require('firebase-functions'); 

const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 

exports.getWatsonToken = functions.auth.user().onCreate(event => { // authentication trigger 

    var https = require('https'); // Nodejs http.request 

    var options = { 
    host: 'stream.watsonplatform.net', 
    path: '/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api', 
    username: groucho, 
    password: swordfish 
    }; 

    callback = function(response) { 
    response.on('end', function() { 
     console.log(response); 
     fs.writeFile("/javascript/services/token", response); 
    }); 
    } 

    http.request(options, callback).end(); 

}); 
+0

不足しているタグについて - Fire Cloudのクラウド機能はGoogle Cloud機能のラッパーであるため、そのタグが使用されます。 https://stackoverflow.com/a/42859932/4815718 –

+0

Firebaseプロジェクトの請求が有効になっていることを確認しましたか?外部URLを呼び出すことはできないからです。無料アカウントの制限です。 – bash

+0

クラウドファンクションインスタンスの任意のファイルに書き込むことはできません。/tmpに書き込むことができます。しかし、それは固執することが保証されていません。なぜファイルにデータが必要なのですか?最後のゲームは何ですか? –

答えて

2

この機能は動作します:コントローラで

// Node modules 
const functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 
const request = require('request'); // node module to send HTTP requests 
const fs = require('fs'); 

admin.initializeApp(functions.config().firebase); 

exports.getWatsonToken = functions.database.ref('userLoginEvent').onUpdate(event => { // authentication trigger when user logs in 

    var username = 'groucho', 
     password = 'swordfish', 
     url = 'https://' + username + ':' + password + '@stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api'; 

    request({url: url}, function (error, response, body) { 

    var tokenService = "app.value('watsonToken','" + body + "');"; 

    fs.writeFile('../public/javascript/services/watsonTokenValue.js', tokenService, (err) => { 
     if (err) throw err; 
     console.log('The file has been saved!'); 
    }); // close fs.writeFile 

    }); // close request 

}); // close getWatsonToken 

firebase.auth().onAuthStateChanged(function(user) { // this runs on login 
    if (user) { // user is signed in 
     console.log("User signed in!"); 
     $scope.authData = user; 
     firebase.database().ref('userLoginEvent').update({'user': user.uid}); // update Firebase database to trigger Cloud Function to get a new IBM Watson token 
    } // end if user is signed in 
    else { // User is signed out 
     console.log("User signed out."); 
    } 
    }); // end onAuthStateChanged 

クラウド機能を歩く、それはHTTPリクエストを送信するためのrequest、そしてfsを含む4つのノードモジュールを、注入します結果をファイルに書き込むためのものです。その後、Firebaseデータベース(コンソールから作成したもの)内の場所userLoginEventへの更新のためにトリガーが設定されます。次に、HTTP要求が消えます。応答(トークン)はbody.app.value('watsonToken','" + body + "');と呼ばれ、トークンをラップするための角度値サービスです。その後、fsはすべてこれをプロジェクトの場所に書き込みます。 AngularJSコントローラで

onAuthStateChangedユーザログインができる。user.uidは、次にFirebaseデータベースに位置userLoginEventに更新され、クラウド機能をトリガするとき、HTTPリクエストが消灯し、応答が書き込まれたトリガーAngularサービスへ。

+0

あなたのソリューションが機能するには、[Spark(無料)プラン](https://firebase.google.com/pricing/)以外のものを実行している必要があります。 FlameまたはBlaze(有料)プランを使用していることを確認してください。また、あなたが選んだのは好奇心です。 – Mowzer

関連する問題