我写了一个函数来验证idToken。我在localHost中部署的应用程序和在Firebase中部署的功能正常运行。但是当我执行yarn build并将我的React应用程序部署在Firebase中时,它不起作用。当我单击调用该函数的组件时,屏幕上将显示构建文件夹的索引文件的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
})
})

最佳答案

您的问题是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)'

关于javascript - 如何在Firebase中的应用程序中使用云功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54497299/

10-10 08:41