我写了一个函数来验证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/