J'utilise l'authentification anonyme avec mon application dans laquelle, lorsque l'utilisateur ouvre l'application, il s'authentifie et la session ne se termine pas une fois l'application fermée.Règles Firebase pour l'authentification anonyme
Je n'arrive pas à trouver comment coder les règles d'écriture en lecture. Ce que je voudrais, c'est que l'utilisateur puisse lire et écrire ses propres entrées sans voir d'autres utilisateurs.
J'ai réussi à authentifier l'utilisateur comme indiqué dans les journaux de la console ci-dessous.
Firebase Structure:
"rounds" : {
"-KBNYNvCAb-Wywq6yowW" : {
"Arrow1" : "1",
"Arrow2" : "1",
"Arrow3" : "2",
"Arrow4" : "2",
"Arrow5" : "1",
"Arrow6" : "1",
"Bow" : "Hoyt",
"Date" : 1456405827389,
"Distance" : "10m",
"RoundName" : "Dcedc",
"Season" : "Indoor",
"TotalScore" : 8,
"UID" : "9ddc8eb2-6f1a-4c26-bac3-b5b473104bb6"
le code actuel dans l'écriture de lecture est:
{
"rules": {
"rounds": {
"$rounds":{
".read": "auth.uid === data.child('UID').val()",
".write": "auth.uid === data.child('UID').val()"
}
}
}
}
Cela ne fonctionne que dans le simulateur quand j'ajoute le nom de table généré de façon aléatoire dans l'URL, par exemple
rounds/-KBNYNvCAb-Wywq6yowW
Le contrôleur pour obtenir l'UID est dans mon contrôleur ici:
app.controller('scoreCtrl', function($scope, roundInfo, equipmentStore){
ref.onAuth(function(authData) {
if (authData) {
$scope.rounds = roundInfo;
$scope.bow = roundInfo;
$scope.round = roundInfo;
$scope.date = new Date();
$scope.addItem = function() {
$scope.round.$add({
"RoundName": roundInfo.name,
"Distance": roundInfo.distance,
"Season": roundInfo.season,
"Date": this.date? this.date.getTime() : null,
"Bow": $scope.bow.title.title,
"Arrow1": roundInfo.arrow1,
"Arrow2": roundInfo.arrow2,
"Arrow3": roundInfo.arrow3,
"Arrow4": roundInfo.arrow4,
"Arrow5": roundInfo.arrow5,
"Arrow6": roundInfo.arrow6,
"TotalScore" : +roundInfo.arrow1 + +roundInfo.arrow2 + +roundInfo.arrow3 + +roundInfo.arrow4 + +roundInfo.arrow5 + +roundInfo.arrow6,
"UID": authData.uid
});
};
}
});
});
usine ronde:
app.factory('roundInfo', function($rootScope, $firebaseArray) {
var roundRef = new Firebase("https://firebaseLink.firebaseio.com/rounds");
roundInfo = {};
roundInfo.name = '';
roundInfo.bow = '';
roundInfo.date = '';
roundInfo.distance = '';
roundInfo.season = '';
roundInfo.arrow1 = '';
return $firebaseArray(roundRef);
});
Les contrôleurs d'authentification firebase:
var ref = new Firebase("https://firebaseLink.firebaseio.com");
ref.authAnonymously(function(error, authData) {
if (error) {
console.log("Login Failed!", error);
} else {
console.log("Authenticated successfully with payload:", authData);
}
if (authData) {
console.log("user logged in")
} else {
console.log("user logged out:")
}
});
var ref = new Firebase("https://firebaseLink.firebaseio.com");
ref.onAuth(function(authData) {
if (authData) {
console.log("Authenticated with uid:", authData.uid);
} else {
console.log("Client unauthenticated.")
}
});
Les journaux console confirment que l'utilisateur a été authentifié:
0 450893 log Client unauthenticated.
1 451712 log Authenticated with uid:, 9ee68f25-d6ba-4902-9d83-329d0acf996e
2 451713 log Authenticated successfully with payload:, [object Object
également affiché: https://groups.google.com/forum/#!topic/firebase-talk/9VRyKIepMPs et https://www.reddit.com/r/Firebase/comments/47qhu1/question_firebase_rules_help/ –
Vos mises à jour sont claires: vous essayez d'interroger 'rounds', mais personne n'a de droits de lecture sur' rounds'. Ma réponse explique pourquoi, mais c'est un doublon de ceux auxquels je suis lié. Par exemple: http://stackoverflow.com/questions/31249956/firebase-rules-cannot-access-to-each-node –