2014-01-25 4 views
2

필자는 Firebase을 처음 사용하고 보안 규칙에 어려움을 겪고 있습니다.Firebase 보안 규칙

해당 사용자 만 액세스 할 수있는 익명 사용자 세션의 데이터를 저장하려고하지만 보안 규칙을 강화하자마자 사용 권한이 거부되고 이유가 해결되지 않습니다.

내가 가진 구조는 다음과 같습니다

/userSessions/$ 사용자/USER_ID

응용 프로그램은 사용자 세션에 밀어 익명 로그인에 의해 반환되는 USER_ID를 기록합니다.

I가 다음과 같은 보안 규칙 :

{ 
    "rules": { 
    ".read": true, 
    "userSessions": { 
     "$user": { 
     ".write": "newData.child('user_id').val() == auth.id", 
     "user_id": { 
      ".validate": "newData.isString()" 
     } 
     } 
    } 
    } 
} 

내가 어리석은 일을하고 있어요 확신하지만, 보안 시뮬레이터를 사용하는 방법을 작동하지 않을 수 있습니다 그래서 이동하는 방법을 모른다 이

어떤 도움을 문제 해결에 대해 크게

편집 감사 - 익명 인증 후 userSessions 아래에 새 항목을 만들려고 할 때 문제가 발생합니다.

코드 :

var userSessionsRef = new Firebase('https://xxxxxx.firebaseio.com/userSessions'); 
var userSession; 
var auth = new FirebaseSimpleLogin(userSessionsRef, function(error,user) { 
    if (error) { 
     console.log(error); 
    } else if (user) { 
     userSessionsRef.child(user.id).set({ 
      user_id: user.id, 
      provider: user.provider, 
      created: Firebase.ServerValue.TIMESTAMP 
      }); 
    userSession = new Firebase('https://xxxxx.firebaseio.com/userSessions/'+user.id); 
    userSession.onDisconnect().remove(); 
} 
+0

권한이 거부되면 어떻게합니까? –

+0

userSessions 아래에 새 $ 사용자를 만드십시오 - 질문을 업데이트하겠습니다. –

+0

안녕하세요 @JonReeves! 시뮬레이터에서 이걸 시험해 보면 어떻게됩니까? 또한 user.id는 숫자 일 가능성이 높습니다 (저는 Twitter 또는 Facebook을 사용하고 있다고 가정합니다. 둘 다 숫자 ID를 반환합니다). 또한 어떤 데이터가 설정되고 있습니까? 사용자 개체를 기록하고 여기에 게시 할 수 있습니까? 보다 쉽고 빠르게 문제를 해결할 수있는 더 많은 데이터가 제공됩니다. – Kato

답변

2

세트() 당신이 제공 한 작업이 잘 실행; 오류 없음; 당신이 당신의 repro에서 포획하지 않은 다른 문제가 여기에 있어야합니다 (Forge에서 익명 인증을 사용 했습니까?). http://jsfiddle.net/katowulf/wxn5J/

관련된 보안 관련 규정에 따르면 현재 보안 규칙은 userSession.onDisconnect().remove();을 허용하지 않습니다. 기록은 오직 다음과 같을 수 있기 때문입니다. newData()에 user_id 값이 포함되어있는 경우 (즉 null 일 수 없슴) 작성됩니다. 이러한 보안 규칙을 구성하는 더 좋은 방법은 다음과 같습니다.

{ 
    "rules": { 
    ".read": true, 
    "userSessions": { 
     "$user": { 
     ".write": "$user === auth.id", // delete allowed 
     "user_id": { 
      ".validate": "newData.isString() && newData.val() === $user" 
     } 
     } 
    } 
    } 
} 
+0

감사. 그 규칙을 시험해 보았지만 여전히 허가를받지 못했습니다. Forge에서 익명 인증을 사용하도록 설정했는지 확인하십시오. 내가 여기서 뭘 잘못하고 있는지 잘 모르겠다. 더하기 측면에서, 시뮬레이터는 현재 작동하지만 익명의 인증을 테스트하는 방법을 잘 모르겠습니다. 사용자 ID를 제공하지 않기 때문에 쓰기를 테스트 할 방법이 없습니다. –

+0

내 firebase 작품에 대해 코드를 사용하는 것 - 어딘가에 뭔가 잘못되어 있어야합니다. 도움을 많이 주셔서 감사합니다. –

관련 문제