Uygulamam için uygun güvenlik kurallarını ayarlamak için uğraşıyorum.Firebase güvenlik kuralı izin veriliyor mu?
Yazdığım uygulamanın genel bir görünümü, kullanıcıların e-posta ve parola kullanarak kendilerini kayıt edebilmeleridir (bunun için Firebase Simple Login kullanıyorum). Giriş yaptıktan sonra kullanıcı todos'unu ekleyebilir.
angularFire('https://<firebase>/firebaseio.com/todos', $scope, 'todos');
Ve herhangi bir kullanıcıya karşı yeni bir todo eklemek için todos modelini güncelliyorum.
$scope.todos.push({
user: '[email protected]',
todo: 'What to do?'
});
herhangi todo eklemek olmayan kayıtlı kullanıcı kısıtlamak için kullanıyorum Bu güvenlik kuralları:
{
"rules": {
".read": true,
"todos": {
".write": "auth != null",
".validate": "auth.email == newData.child('user').val()"
}
}
}
Ama daha doğrulanmış bir kullanıcı herhangi bir veri yazmak için izin vermez ve bir hata atma, "FIREBASE UYARI: on() veya/todos için bir kez() başarısız: Hata: permission_denied."
Fakat simülatörde aşağıdaki verileri eklerseniz, beklendiği gibi çalışır.
/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.
Bunun neden çalışmadığını görmek için Forge'daki güvenlik simülatörünü kullanmayı deneyebilirsiniz. İki yorum: 1) Bir nesneyle bir dizi yazıyormuşsunuz gibi görünüyor, muhtemelen sadece bir nesne olmalı. 2) "$ todos" değişkeni muhtemelen "todos" olmalıdır. – Anant
@Anant: Yanıt için Thx. Dediğiniz gibi $ ve değiştirilen validate kuralını ".validate" ile kaldırdım: "auth.email == '[email protected]'" 'a @ b.com' kayıtlı bir kullanıcıdır - değil ".validate": "'[email protected]' == newData.child ('kullanıcı'). val()" '. NewData ne var görmek mümkün mü? – codef0rmer
@Anant: Soruyu daha fazla açıklık sağlamak için güncelledim. Dediğiniz gibi, $ gerekli değildir, o zaman neden belgelerindeki her yerde kullanılır? – codef0rmer