如何在Firebase中的应用程序中使用云功能

时间:2019-02-02 20:39:25

标签: javascript reactjs firebase google-cloud-functions

我写了一个验证idToken的函数。我在localHost中部署的应用程序和在Firebase中部署的功能正常运行。但是当我做yarn build和火力地堡我的申请作出反应的部署,这是行不通的。当我单击调用该函数的组件时,屏幕上将显示构建文件夹的索引文件的html。在package.json文件中,我编写了代理,在Firebase中带有函数路径,在组件中,我使用axios.post (...)调用了该函数。部署后,我应该修复一些东西使其正常工作吗?

在我的src的package.json我有:

"proxy": "https://us-central1-teste.cloudfunctions.net/",

在我的组件中,我有:

const user = yield auth.currentUser
    const {ra} = user
    const datas = yield new Promise(resolve => {
        resolve(axios.post('/auth?token='+ra)) 
    })
if (datas.data === user.uid){
       ...
    }else{
        ...
    } 

在我的云功能我有:

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

exports.auth = functions.https.onRequest((request, response) => {   
const idToken = request.query.token
admin.auth().verifyIdToken(idToken)
.then( decodedToken => {
    response.send(decodedToken.uid)  
    return 
}).catch( error => {
    response.send(error.errorInfo.code)
    return
})  
})

1 个答案:

答案 0 :(得分:1)

您的问题是CORS!尝试这样做:

在您的组件中:

const data = yield new Promise(resolve => {
        resolve(axios.post('https://us-central1-teste.cloudfunctions.net/auth?token='+ra))
})

在您的职能中:

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

exports.auth = functions.https.onRequest((request, response) => {   
const idToken = request.query.token
admin.auth().verifyIdToken(idToken)
.then( decodedToken => {
    response.header("Access-Control-Allow-Origin", "*") 
    response.send(decodedToken.uid)  
    return 
}).catch( error => {
    response.send(error.errorInfo.code)
    return
})  
}) 

如果只想限制对系统的访问,请将*更改为'https//:(system's_name)'