Firebase云功能中的权限被拒绝 [英] Permission denied in firebase cloud functions

查看:133
本文介绍了Firebase云功能中的权限被拒绝的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在firebase云功能中,我在对实时数据库进行读取或写入时无法通过admin-firebase进行访问. 此 https://github.com/firebase/firebase-functions/issues/16无法解决我的问题,App引擎默认服务帐户权限设置为编辑器".

In firebase cloud function I am getting access denied on admin-firebase on read or write to realtime database. This https://github.com/firebase/firebase-functions/issues/16 does not solve my problem , App engine default service account rights are set to Editor.

我还使用服务帐户密钥配置了Node.js管理员sdk,一切正常.

I also have Node.js admin sdk configured with service Account Key and there everything works as expected.

我已经在数据库中设置了默认的安全规则.

I have set default security rules in 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 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 

为简洁起见,这里没有登录实时数据库:

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'

为什么我不能在云功能中使用管理员进行读写?

推荐答案

尝试在

Try checking permission for "App Engine default service account" on https://console.cloud.google.com/iam-admin/iam/project, and ensure that it says "Editor".

这篇关于Firebase云功能中的权限被拒绝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆