将aws后端连接到firebase数据库

时间:2017-11-16 16:19:45

标签: python amazon-web-services firebase

我目前正在我的aws服务器中运行python代码并尝试连接到我朋友的firebase数据库。我阅读了firebase提供的文档以连接到aws服务器。

  

https://firebase.google.com/docs/admin/setup

我已经完成了每一步,但是当我尝试连接到服务器时出现错误。我已将google-service.json添加为凭据。 我得到的错误:

  

ValueError:无效的服务帐户证书。证书必须   包含“type”字段设置为“service_account”。

我是否需要修改 google-services.json

我的代码:

import firebase_admin
from firebase_admin import credentials


cred = credentials.Certificate('/home/ec2-user/google-services.json')
#default_app = firebase_admin.initialize_app(cred)
other_app = firebase_admin.initialize_app(cred, name='other')
ault_app = firebase_admin.initialize_app()

2 个答案:

答案 0 :(得分:3)

google-services.json通常是Android应用配置文件的名称。这与服务帐户不同。要获取项目服务帐户的凭据,您需要从项目设置中生成一个Firebase控制台 - >服务帐户。文档是here。获得此文件后,您可以使用它初始化Admin SDK以开始访问项目中的数据。

答案 1 :(得分:1)

更好的方法是将凭据存储在s3(已加密)上,并将IAM角色附加到lambda函数。

import os
import firebase_admin
from firebase_admin import credentials
import boto3
from settings.local_settings import AWS_REGION, ENVIRONMENT
import json

firebase_config_file = 'app-admin-config-{}.json'.format(ENVIRONMENT)
firebase_admin_creds_file = 'app-admin-sdk-{}.json'.format(ENVIRONMENT)

current_dir = os.path.abspath(os.path.dirname(__file__))
files = [f for f in os.listdir(current_dir) if os.path.isfile(f)]

if firebase_config_file not in files and firebase_admin_creds_file not in files:
    s3 = boto3.resource('s3', region_name=AWS_REGION)
    bucket = s3.Bucket('app-s3-secrets')

    firebase_config = json.loads(
        bucket.Object('app-admin-config-{}.json'.format(ENVIRONMENT)).get()['Body'].read())
    firebase_admin_creds = json.loads(
        bucket.Object('app-admin-sdk-{}.json'.format(ENVIRONMENT)).get()['Body'].read().decode())

class Firebase:
    @staticmethod
    def get_connection():
        cred = credentials.Certificate(firebase_admin_creds)
        return firebase_admin.initialize_app(cred, firebase_config)


app = Firebase.get_connection()