В облачных функциях Firebase отказано в доступе

1

В облачной функции firebase я получаю доступ на admin-firebase на чтение или запись в базу данных реального времени. Этот https://github.com/firebase/firebase-functions/issues/16 не решает мою проблему, права учетной записи службы по умолчанию для приложения Engine установлены на "Редактор".

У меня также есть Node.js admin sdk, настроенный с ключом учетной записи службы, и там все работает так, как ожидалось.

Я установил правила безопасности по умолчанию в db.

Это примерная функция

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
admin.database.enableLogging(true);

//event fires properly
exports.sendNotif = functions.database.ref('/messages/{roomId}/{msgKey}')
    .onWrite(event => {
        const message = event.data.val().text;
    //this executes as expected
        console.log(message);

//here I am getting access denied and consequently function timeout after 60 seconds.
        return admin.database().ref('/userFCMTokens').once('value')
            .then(snap => console.log(snap.val()));
    });

и вот фрагмент журнала из firebase realtime db

Realtime connection established.  
2017-06-08T15:19:03.168Z I sendNotif: p:0: connection ready  
2017-06-08T15:19:03.168Z I sendNotif: p:0: {"r":28,"a":"gauth","b":{"cred":"********************"}}  
2017-06-08T15:19:03.169Z I sendNotif: p:0: Listen on /userFCMTokens for default  
2017-06-08T15:19:03.169Z I sendNotif: p:0: {"r":29,"a":"q","b":{"p":"/userFCMTokens","h":""}}  
2017-06-08T15:19:03.538Z I sendNotif: p:0: from server: {"r":28,"b":{"s":"permission_denied","d":"Access denied."}}  
2017-06-08T15:19:03.538Z I sendNotif: Auth token revoked: permission_denied/Access denied. 
2017-06-08T15:19:03.538Z I sendNotif: c:0:13: Closing realtime connection.  
2017-06-08T15:19:03.538Z I sendNotif: c:0:13: Shutting down all connections  
2017-06-08T15:19:03.538Z I sendNotif: c:0:13:0 WebSocket is being closed 

Здесь без регистрации в режиме реального времени db для краткости:

2017-06-08T15:26:23.164035495Z D sendNotif: Function execution started
2017-06-08T15:26:23.164076543Z D sendNotif: Billing account not configured. External network is not accessible and quotas are severely limited. Configure billing account to remove these restrictions
2017-06-08T15:26:23.539Z I sendNotif: message console logged
2017-06-08T15:27:23.165321703Z D sendNotif: Function execution took 60002 ms, finished with status: 'timeout'

Почему я не могу читать и писать с помощью администратора в облачных функциях?

Теги:
firebase
google-cloud-functions
firebase-realtime-database

1 ответ

2

Попробуйте проверить разрешение на "учетную запись службы по умолчанию для App Engine" на странице https://console.cloud.google.com/iam-admin/iam/project и убедитесь, что она говорит "Редактор".

  • 0
    Да, я проверил, что эти разрешения установлены для редактора. На самом деле это указано во втором предложении моего вопроса.
  • 0
    Ой, извините, я пропустил этого Джона. Еще одна вещь, которую вы можете попробовать: отключить и снова включить API облачных функций на console.cloud.google.com/apis/dashboard.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню