2016-09-20 2 views
0

Мне нужно предоставить доступ для чтения/записи только для аутентифицированных пользователей, но, похоже, Firebase не признает, что пользователь аутентифицирован.Ошибка Firebase: разрешение отклонено. Невозможно прочитать/записать из базы данных Firebase

После того, как я зарегистрирую пользователя с почтой и паролем, я предполагаю, что пользователь аутентифицирован и ему разрешено читать/писать из базы данных. Однако разрешение отклонено.

Вот код для знака в деятельности:

firebaseAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      //checking if success 
      if(task.isSuccessful()){ 
       //display some message here 
       // Toast.makeText(Register.this,"Successfully registered",Toast.LENGTH_LONG).show(); 


       sRef.authWithPassword(email,password,new Firebase.AuthResultHandler() { 

        @Override 
        public void onAuthenticated(AuthData authData) { 
         Toast.makeText(Register.this, user.getDisplayName()+" is authenticated",Toast.LENGTH_LONG).show(); 
        } 

        @Override 
        public void onAuthenticationError(FirebaseError firebaseError) { 
        } 
       }); 

       Intent i = new Intent(Register.this,MainActivity.class); 

       startActivity(i); 

      }else{ 
       //display some message here 
       Toast.makeText(Register.this, task.getException().getMessage(),Toast.LENGTH_LONG).show(); 
      } 

     } 
    }); 

Я хочу использовать правило по умолчанию в firebase, что позволяет только аутентификации пользователей для чтения/записи из базы данных:

{ 
"rules": { 
    ".read": "auth != null", 
".write": "auth != null" 
} 
} 

Но когда Я изменяю правила, так как ниже мой код может получить доступ для чтения/записи к базе данных.

{ 
"rules": { 
".read": true, 
".write":true 
} 
} 

Это хорошо в тестировании, однако я не могу продолжать производство с помощью этого метода. Пожалуйста, помогите, как аутентифицировать зарегистрированного пользователя для доступа к базе данных в Firebase.

+0

Ни один из кода, который вы использовали, не обращается к базе данных, поэтому он еще не может повысить эту ошибку. Пожалуйста, поделитесь [минимальным, полным кодом, который необходим для воспроизведения проблемы] (http://stackoverflow.com/help/mcve). –

+0

Включили ли вы способ входа в систему firbase, например, адрес электронной почты или пароль или анонимный в разделе auth перед входом в систему. –

+0

Я не использовал код для доступа к базе данных firebase, поскольку он работает, но только когда я изменяю правила для публики. Когда я использую правила по умолчанию, разрешение отклоняется. –

ответ

3

Ваш код представляет собой смесь вызовов API из устаревшего 2.x.x. SDK, например:

sRef.authWithPassword(email,password,new Firebase.AuthResultHandler()

и новый 9.x.x SDK:

firebaseAuth.signInWithEmailAndPassword()

Два SDKs не совместимы. Вам нужно использовать или другое. В файле Upgrade Guide объясняется, как перенести из старого SDK в новый SDK.

Вам также необходимо использовать консоль Firebase, которая соответствует используемому SDK: Legacy Console или новый Firebase Console.

+0

Я попытался удалить: sRef.authWithPassword (электронная почта, пароль, новый Firebase.AuthResultHandler(), но он по-прежнему не работает. Это было первое, что я сделал. –

+0

Я получил его, все, что мне нужно было сделать, это обновление репозитории студии android и добавьте новые зависимости. Спасибо. –

Смежные вопросы