В доступе отказано, если request.auth! = Null является правилом только при создании документов в onComplete mAuth.createUserWithEmailAndPassword (электронная почта, пароль) - PullRequest
0 голосов
/ 29 апреля 2019

Если у меня есть следующее правило в моих Правилах безопасности (единственное правило):

match /{document=**} {
      allow read, write: if request.auth != null;
    }

, и я делаю следующее:

mAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(activity, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "createUserWithEmail:success");
                        //initial database setup
                        final WriteBatch adminSetupBatch = mDbase.batch();

                        //create adminSUsersGroup and add documentID value as a field in document
                        DocumentReference adminGroupRef = mDbase.collection("adminUserGroups").document();

                        Map<String, Object> adminGroup = new HashMap<>();
                        adminGroup.put("adminID", task.getResult().getUser().getUid());
                        adminGroup.put("age", -1);
                        adminSetupBatch.set(adminGroupRef, adminGroup);

                        //Commit the batch
                        adminSetupBatch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {

                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                         if (task.isSuccessful()) {
                               Log.d(TAG, "Admin setup batch write completed");
                              Intent intent = new Intent(activity, MainActivity.class);
                              activity.startActivity(intent);
                              Toast.makeText(MyApplication.getContext(), MyApplication.getContext().getString(R.string.alert_adminAccountCreated),
                                       Toast.LENGTH_SHORT).show();
                         }
                            else {
                             Log.d(TAG, "Error: completing Admin setup batch write", task.getException());
                             Toast.makeText(MyApplication.getContext(), task.getException().getMessage(),
                                        Toast.LENGTH_SHORT).show();
                            }
                        }

             });

                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "createUserWithEmail:failure", task.getException());
                        Toast.makeText(MyApplication.getContext(), task.getException().getMessage(),
                                Toast.LENGTH_SHORT).show();
                    }
                }
            });

Если метод createUserWithEmailAndPassword () имеет значениеуспешно, затем создайте документ (ы) по умолчанию и т. д.

Но по какой-то причине я получаю сообщение об отказе в разрешении, и документы не создаются.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

попробуйте изменить только ваше разрешение в firebase на

match /{document=**} {
  allow read, write;
}
0 голосов
/ 29 апреля 2019

Ладно, неважно, я думаю, что решил эту проблему. Сначала я использовал:

if isSignedIn();

в моих правилах безопасности производственного кода, которые вызывают следующую функцию:

function isSignedIn() {
   return request.auth != null;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...