На экране управления у меня есть авторизация электронной почты и анонимный вход. данные есть только один узел - Hello: «Мир»Проверка подлинности электронной почты Firebase с правилами, которые не работают должным образом
правило, что у меня есть
{
"rules": {
".read": "auth != null",
//".read": true,
".write": true
}
}
Если пользователь не вошел в систему с указанным выше правилом, то вы получите Сбой чтения: Разрешение denied Это все хорошо.
Если анонимный пользователь зарегистрирован, тогда я могу увидеть значение «{Hello = World»} Работает до сих пор.
Если я войти с пользователем сообщения электронной почты я получаю сообщение об ошибке: FirebaseError: Отказано в
'' OnAuthenticate делает курок, и я получаю: ID Пользователь: 3c6ce912-a05a-49ed-ae68-8ec97d022303, Поставщик услуг: пароль
Полный код приведен ниже. Что я делаю не так?
import com.firebase.client.AuthData;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class FirebaseTest {
Firebase ref = new Firebase("https://<FIREBASE NAME>.firebaseio.com/");
public FirebaseTest() {
//logonAnonymous(); //works
logonEmail(); //permission denied
showValues();
try {
System.out.println("Waiting for input");
System.in.read();
} catch (IOException ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void logonAnonymous() {
ref.authAnonymously(new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
// we've authenticated this session with your Firebase app
System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
// there was an error
System.out.println("Anon user auth error " + firebaseError.toString());
}
});
}
private void logonEmail() {
ref.authWithPassword("[email protected]", "secret", new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
// there was an error
}
});
}
public void showValues() {
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println(" value -" + snapshot.getValue());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
}
}
Также см Франк другой, [очень информативный, ответ на асинхронном обратных вызовов] (http://stackoverflow.com/questions/27049342/asynchronous-access-to- ан-массив-в-firebase/27050749 # 27050749). – Kato
Спасибо, это сработало! – VladimirSD