Правила Firestore не работают, используя displayName, Android - PullRequest
1 голос
/ 11 марта 2020

У меня есть правила firestore, такие как:

 match /{document=**} {

      allow read, write: if request.auth.token.name == "dummyUser";

}

Теперь, когда я создаю userUserWithEmailAndPassword, после того как я создал пользователя, я устанавливаю displayName в «dummyUser», как это, с помощью метода setUsersSecureName (), который я сделал:

fun setUsersSecureName(myCallback: (Boolean?) -> Unit) {

val user = FirebaseAuth.getInstance().currentUser

val profileUpdates = UserProfileChangeRequest.Builder()
    .setDisplayName("dummyUser")
    .build()

user?.updateProfile(profileUpdates)
    ?.addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d(TAG_HELPER_METHODS, "Secure user profile updated.")
            myCallback(true)

        }
    }

}

Я делаю то же самое для анонимных входов. Поэтому я создаю анонимный вход в систему следующим образом:

auth.signInAnonymously()
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG_MAIN, "signInAnonymously:success")
                    val user = auth.currentUser

                    setUsersSecureName(){
                        makeRequest()
                    }

Как видите, после успешного входа в систему с анонимным пользователем я меняю имя пользователя. Теперь это кажется измененным, когда я проверяю это, пользователи displayName - "dummyUser". Тем не менее, запрос пожарного хранилища не работает, и я получаю сообщение в журнале:

PERMISSION_DENIED: Missing or insufficient permissions. 

Это также не работает, когда пользователи вошли в систему с помощью электронной почты и пароля. С чего бы это?

Спасибо

1 Ответ

2 голосов
/ 11 марта 2020

Правила безопасности работают, получая токен ID пользователя от Аутентификации Firebase во время запроса. Firestore SDK делает это автоматически. Обычно вам не нужно делать ничего особенного.

Однако в этом конкретном случае c после обновления профиля пользователя Firebase Authentication все еще удерживает маркер идентификатора пользователя, который не знает об изменении имени. Вам, вероятно, также придется указать Firebase Authentication, чтобы он выбрал новую, вызвав user.getIdToken(true) после успешного обновления профиля, чтобы принудительно обновить sh токена ID. После успешного выполнения refre sh вы можете попробовать запрос Firestore, чтобы проверить, работает ли он. user.reload() также может работать. Оба эти метода являются асинхронными и возвращают Задачу, которую следует использовать для отслеживания завершения запроса.

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