인증/보안 규칙을 사용하여 onDisconnect(). remove()를 사용하는 데 문제가 있습니다.Firebase가 onDisconnect()를 인증/제거 할 수 없습니다.
var rootRef = new Firebase(FIREBASE_URL + 'sites/' + FIREBASE_ROOT);
rootRef.auth(user.FIREBASE_TOKEN, loginCallback);
그런 다음, 내 loginCallback 현재 사용자 활성 등록하고 사용자 참조가 분리에 제거되었는지 확인하십시오
이첫째,이 인증()에 사용자가 로그 : 기본적으로 내가 가지고있는 것은 이것이다 : 내 중포 기지의 특정 섹션에 대한
var activeUsers = $firebase(rootRef.child('pages/' + pageId + '/users')).$asArray();
var rawUser = {
id: user.id,
displayName: user.displayName
};
activeUsers.$add(rawUser).then(function (userRef) {
userRef.onDisconnect().remove();
});
내 보안 규칙은 다음과 같이 :
{
"rules": {
"sites": {
"$siteName": {
"pages": {
"$pageId": {
"users": {
// only users with firebase access can use this
".read": "auth.firebase_user === true"
"$arrayId": {
// users can only write their own data
".write": "auth.firebase_user === true && auth.id === newData.child('id').val()",
".validate": "newData.hasChildren(['id', 'displayName'])"
}
}
}
}
}
}
}
}
이 보안 구성과 JS를 사용하면 사용자가 FireNet에서 참조를 제거 할 때 연결이 끊어지지 않습니다. 그러나 다음 보안 규칙을 대신 사용하는 경우 :
{
"rules": {
"sites": {
"$siteName": {
"pages": {
"$pageId": {
"users": {
// only users with firebase access can use this
".read": "auth.firebase_user === true",
".write": "true",
"$arrayId": {
// users can only write their own data
//".write": "auth.firebase_user === true && auth.id === newData.child('id').val()",
".validate": "newData.hasChildren(['id', 'displayName'])"
}
}
}
}
}
}
}
}
사용자 참조는 연결 해제시 올바르게 제거됩니다.
여러 가지 보안 규칙과 JS 구현을 시도했지만 모두이 문제로 근본적으로 끝납니다.
여기에 인증 문제가있을 수있는 사람이 있습니까? 사용자의 인증 변수가 적기에 Firebase를 사용하여 사용자를 적절하게 제거합니까?
사이드 노트 : 저는 AngularFire를 사용하고 있습니다. 이것은 현재 다른 사람이 현재 페이지를보고 있는지를 보여주는 현재 상태 구현입니다.
유용한 디버깅 도구는 콜백을 onDisconnect(). remove (/ * callback here * /) 메소드에 넣는 것입니다. 그러면 보안 오류를 캡처 할 수 있습니다. – Kato