2017-03-22 2 views
2

Firebase 용 클라우드 기능을 통해 특정 위치에 데이터를 쓸 수있게하는 규칙을 통해 데이터베이스를 보호하려면 어떻게해야합니까? 이전에는 admin 클라이언트 databaseAuthVariableOverride에 uid를 추가하고 해당 uid를 사용하는 옵션이있었습니다. 규칙 섹션에서,하지만 지금 우리가 admin.initializeApp(functions.config().firebase);를 통해 초기화 그래서 추가적인 PARAMS을 추가하는 방법에 대해 확실하지거야.Firebase 용 클라우드 기능에만 쓰기 액세스 허용

편집 은이 대신에 인증서를 사용하여 시작하는 것이 좋습니다? 즉 admin.initializeApp(functions.config().firebase)이 끝난 이상 가지고 functions.config() 실제로에서 데이터를 가져 오는 곳이 단지 노드 모듈을지지 않습니다 어떤 이익을

admin.initializeApp({ 
    credential: admin.credential.cert("/path-to-cert"), 
    databaseURL: "database-url", 
    databaseAuthVariableOverride: { uid: "some-id" } 
}); 

?

답변

10

일반적으로, 클라우드 기능 코드의 상단에, 당신은 :

var functions = require('firebase-functions'); 

firebase-functions 노드 모듈의 일환으로, 당신은 당신이 필요한 모든 것을 갖추고 객체가 단지 인 functions.config().firebase에 액세스 할 수 데이터베이스 URL 및 자격 증명 구현 (응용 프로그램 기본 자격 증명을 기반으로 함)을 비롯하여 Admin SDK를 초기화합니다. 코드에 console.log(functions.config().firebase)이 있으면이 속성을 가진 객체이고 코드에서 사용할 수있는 몇 가지 속성 만있는 것을 볼 수 있습니다.

databaseAuthVariableOverridelimit the Admin SDK's privileges에 추가 할 수 있습니다. 당신은 개체 자체를 덮어 쓸 수 있습니다 :

var firebaseConfig = functions.config().firebase; 
firebaseConfig.databaseAuthVariableOverride = { 
    uid: 'some-uid', 
    foo: true, 
    bar: false 
}; 
admin.initializeApp(firebaseConfig); 

을하거나 새 객체에 관련된 세부 사항을 복사 Object.assign() 같은 것을 사용할 수 있습니다

var firebaseConfig = Object.assign({}, functions.config().firebase, { 
    databaseAuthVariableOverride: { 
    uid: 'some-uid', 
    foo: true, 
    bar: false 
    } 
}); 
admin.initializeApp(firebaseConfig); 
+0

IIRC, Object.assign'에 대한 인수의 순서()'이 중요합니다. 드물게'functions.config(). firebase'는'databaseAuthVariableOverride' 속성을 포함하고 있습니다.이 속성은 위에서 지정한 것보다 우선합니다. 'Object.assign ({}, functions.config(). firebase, {/ * 재정의 값 * /}) '을 사용하여 설정 한 것이 무엇이든 최종 값으로 유지되도록하는 것이 좋습니다. – samthecodingman

+0

대신 사용자 지정 서비스 작업자 인증서로 관리자를 시작하는 것이 좋습니까? – Ilja

+0

@Ilja - 할 수는 있지만,'functions.config(). firebase'에 제공된 자격증 명을 사용하는 것 이상의 이점은 없습니다. 또한 일반적으로 나쁜 습관 인 자체 서비스 계정 키 파일을 관리해야합니다. @samthecodingman - 팁 주셔서 감사합니다. 코드 샘플을 업데이트했습니다. – jwngr

관련 문제