Я использую анонимную аутентификацию с моим приложением, в котором, когда пользователь открывает приложение, он/она будет аутентифицироваться, и сеанс не будет завершен после закрытия приложения.Правила Firebase для анонимной аутентификации
У меня возникли проблемы с выяснением того, как закодировать правила чтения. Я бы хотел, чтобы пользователь мог читать и писать свои собственные записи, не видя других пользователей.
Мне удалось аутентифицировать пользователя, как показано в журналах консоли ниже.
Firebase Состав:
"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"
текущий код в считанной записи:
{
"rules": {
"rounds": {
"$rounds":{
".read": "auth.uid === data.child('UID').val()",
".write": "auth.uid === data.child('UID').val()"
}
}
}
}
Эта функция работает только в тренажере, когда я добавляю случайным именем таблицы в URL, например
rounds/-KBNYNvCAb-Wywq6yowW
Контроллер, чтобы получить uid, находится в моем контроллере здесь:
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
});
};
}
});
});
Круглый Фабрика:
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);
});
Контроллеры аутентификации 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.")
}
});
Консоль журналов подтверждают, что пользователь был идентифицирован:
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
Также отправленный: https://groups.google.com/forum/#!topic/firebase-talk/9VRyKIepMPs и HTTPS://www.reddit.com/r/Firebase/comments/47qhu1/question_firebase_rules_help/ –
Ваши обновления дают понять: вы пытаетесь выполнить запрос из 'rounds', но никто не имеет разрешения на чтение в' rounds'. Мой ответ объясняет, почему это так, но это дубликат тех, на которые я ссылаюсь. Например: http://stackoverflow.com/questions/31249956/firebase-rules-cannot-access-to-each-node –