2017-09-28 1 views
0

Firebase 용 Cloud Function을 사용하고 있습니다. admin.database().ref을 사용하면 데이터베이스에 적용된 모든 규칙이 무시됩니다. 관리자는 무엇이든 할 수 있습니다. 명확하게하려면 :admin.database()에서 firebase 데이터베이스 규칙을 만드는 방법 ref (클라우드 기능)

나는 실시간 데이터베이스를 가지고있다. 이름은 문자열 및 길이> = 50, ...이어야합니다.

SDK를 사용할 때 모든 잘못된 데이터가 거부됩니다. 하지만 firebase 클라우드 기능을 사용하도록 이동하면 (https 엔드 포인트 세트를 제공하여 클라이언트 측의 작업을 줄이기 위해) 더 이상 작동하지 않습니다.

그래서 작동하게하는 방법이 있는지 궁금합니다. 나는 생각했다 : admin.database()에 대한 대체

  1. 찾기 뭔가 ( 이미 event.data.ref에보고했다하지만 내 경우에는 작동하지 않습니다 - HTTP 요청)
  2. 클라우드 기능 (좋은되지 않음)에서 데이터를 확인

몇 가지 힌트/단서를 제공해 주시겠습니까?

답변

1

이것은 Firebase Admin SDK의 예상되는 기본 동작입니다 : 코드는 관리자 권한으로 데이터베이스에 액세스합니다.

코드에서 수행 할 수있는 작업을 제한하려는 경우 해당 코드를 초기화하여 특정 UID로 실행할 수 있습니다. Authenticate with limited privileges에 대한 문서에서 :

는 중포 기지 응용 프로그램 인스턴스가 액세스 할 수있는 자원을보다 세밀하게 제어를 얻으려면 서비스를 표현하기 위해 보안 규칙에 고유 식별자를 사용합니다. 당신이 중포 기지 응용 프로그램을 초기화 할 때

는 ... 그런

는 서버에, 데이터베이스 규칙에 사용되는 인증 오브젝트를 대체 할 databaseAuthVariableOverride 옵션을 사용합니다. 이 사용자 지정 인증 개체에서 uid 필드를 보안 규칙에서 서비스를 나타내는 데 사용한 식별자로 설정합니다.
// Initialize the app with a custom auth variable, limiting the server's access 
admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount), 
    databaseURL: "https://databaseName.firebaseio.com", 
    databaseAuthVariableOverride: { 
    uid: "my-service-worker" 
    } 
}); 

은 완전한 예를 들어, 링크 된 문서를 참조하십시오.

관련 문제