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" 

즉, 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

누락 된 태그 관련 - Firebase 용 Cloud Functions는 Google Cloud 기능을 둘러싼 래퍼이므로 해당 태그가 사용됩니다. https://stackoverflow.com/a/42859932/4815718 –

+0

Firebase 프로젝트에 대한 청구가 활성화되어 있는지 확인 했습니까? 외부 URL을 호출 할 수 없기 때문입니다. 무료 계정의 한계입니다. – bash

+0

Cloud 기능 인스턴스의 임의 파일에 쓸 수 없습니다./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 요청을 보내는 requestfs 등 4 개 노드 모듈을 주입 결과를 파일에 기록합니다. 그런 다음 트리거가 Firebase 데이터베이스 (콘솔에서 생성 한)에 userLoginEvent 위치에 대한 업데이트로 설정됩니다. 그런 다음 HTTP 요청이 사라집니다. 응답 (토큰)은 body.app.value('watsonToken','" + body + "');이라고하며 토큰을 감싸는 각도 값 서비스입니다. 그럼 fs 내 프로젝트의 모든 위치에이 모든 것을 씁니다.

사용자가 로그인 할 때 AngularJS 컨트롤러에서 onAuthStateChanged이 트리거됩니다. 그러면 firefox 데이터베이스에서 user.uid가 userLoginEvent 위치로 업데이트되고 Cloud 기능이 트리거되고 HTTP 요청이 전송되고 응답이 기록됩니다 각도 서비스.

+0

귀하의 솔루션이 작동하려면, 귀하가 [스파크 (무료) 플랜] (https://firebase.google.com/pricing/) 이외의 다른 것을 실행해야한다고 생각합니다. Flame 또는 Blaze (유료) 플랜을 사용하고 있는지 확인해 주시겠습니까? 또한, 나는 당신이 선택한 것이 궁금합니다. – Mowzer