Как я могу использовать облачную функцию с приложением в Firebase - PullRequest
0 голосов
/ 02 февраля 2019

Я написал функцию для проверки idToken.Мое приложение в localHost и функция, развернутая в Firebase, работает нормально.Но когда я делаю yarn build и развертываю свое приложение React в Firebase, это не работает.Когда я нажимаю на компонент, вызывающий функцию, на экране появляется HTML-файл индексного файла папки сборки.В файле package.json я написал прокси с путем к функции в Firebase, а в компоненте я вызываю функцию с axios.post (...).Должен ли я что-то исправить, чтобы это работало сразу после развертывания?

в моем package.json из src У меня есть:

"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 голосов
/ 13 февраля 2019

Ваша проблема - 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)'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...