내 응용 프로그램에 적절한 보안 규칙을 설정하는 데 어려움을 겪고 있습니다.Firebase 보안 규칙이 권한을 거부합니까?
필자가 작성한 응용 프로그램에 대한 개요는 사용자가 전자 메일과 암호를 사용하여 스스로 등록 할 수 있다는 것입니다. (완벽하게 작동하는 Firebase Simple Login을 사용하고 있습니다). 로그인하면 사용자가 할일을 추가 할 수 있습니다.
angularFire('https://<firebase>/firebaseio.com/todos', $scope, 'todos');
모든 사용자에 대해 새로운 할 일 목록을 추가하려면 간단히 할 일 목록 모델을 업데이트하면됩니다.
$scope.todos.push({
user: '[email protected]',
todo: 'What to do?'
});
내가 어떤 할 일 추가 등록되지 않은 사용자를 제한하는 데 사용하고이 보안 규칙 :
{
"rules": {
".read": true,
"todos": {
".write": "auth != null",
".validate": "auth.email == newData.child('user').val()"
}
}
}
는하지만 그것도 인증 된 사용자가 어떤 데이터를 기록하는 것을 허용하지 않고 오류를 던지고, "FIREBASE WARNING :/todos에 대한 on() 또는 once() 실패 : 오류 : permission_denied."
하지만 시뮬레이터에서 다음 데이터를 추가하면 예상대로 작동합니다.
/todos:.write: "auth != null"
=> true
/todos:.validate: "auth.email == newData.child('user').val()"
=> true
/todos:.validate: "auth.email == newData.child('user').val()"
=> true
Write was allowed.
Forge에서 보안 시뮬레이터를 사용하면이 기능이 작동하지 않는 이유를 확인할 수 있습니다. 두 가지 의견 : 1) 당신은 하나의 객체를 가진 배열을 작성하는 것 같고, 그것은 단지 하나의 객체 여야합니다. 2) "$ todos"변수는 단지 "todos"여야합니다. – Anant
@Anant : 답장을위한 Thx. 앞에서 말했듯이 $를 제거하고 유효성 검사 규칙을''.validate ''로 변경했습니다 : "auth.email == '[email protected]'"''@b.com'은 등록 된 사용자입니다. ''validate '': "[email protected]"== newData.child ('user') .Val() "'. newData의 내용을 볼 수 있습니까? – codef0rmer
@Anant : 더 명확하게하기 위해 질문을 업데이트했습니다. 앞에서 말했듯이 $가 필요하지 않은 이유는 문서의 어디에서나 사용되는 이유는 무엇입니까? – codef0rmer