Получение этой ошибки:
E/StorageUtil: ошибка при получении токена java.util.concurrent.ExecutionException: com.google.firebase.internal.api.FirebaseNoSignedInUserException: Прежде чем пытаться получить токен, войдите в систему.
Это тоже:
E/StorageException: произошло исключение StorageException. У пользователя нет разрешения на доступ к этому объекту. Код: -13021 HttpResult: 403 E/StorageException: { "ошибка": { "код": 403, "сообщение": "Отказано в доступе". }} java.io.IOException: { "ошибка": { "код": 403, "сообщение": "Отказано в доступе". }}
Когда этот код попадает в мое приложение для Android:
val urlTask = uploadTask?.continueWithTask { task ->
if (!task.isSuccessful) {
Toast.makeText(context, "Upload to Cloud Failed!", Toast.LENGTH_SHORT).show()
task.exception?.let {
throw it
}
} imagesRef?.downloadUrl.....ERROR IS GENERATED HERE...
Началось, когда я включил авторизацию по электронной почте/паролю и отключил анонимный вход, однако я снова включил анонимный вход и перед началом загрузки убедился, что авторизация не является нулевой.
val auth = Firebase.auth
val user = auth.currentUser
ТАКЖЕ, ОН СОХРАНЯЕТ ЗАГРУЖЕННЫЕ ИЗОБРАЖЕНИЯ НА ХРАНЕНИЕ БЕЗ ПРОБЛЕМ... но не загружает URL-адрес.
Вот правила, действующие для моего хранилища Firebase:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /images/{imageId} {
allow write: if request.auth != null;
allow read: if request.auth != null;
}
}
}
Я не смог найти ответ, почему он будет загружать, но не загружать URL-адрес.
Поскольку вы используете Kotlin, я думаю, что этот ресурс поможет. Вот соответствующий репозиторий.
@AlexMamo, файлы загружаются в хранилище Firebase без проблем. Ошибка возникает при запуске downloadUrl. Входящие работают, исходящие нет?
@AlexMamo, спасибо за ссылки. Я проработаю их и отвечу.
Так что, скорее всего, ваш пользователь не аутентифицируется, когда вы пытаетесь прочитать файл, верно?
@AlexMamo Я только что добавил оператор Log.d, и вот что он получил. Ты прав! Он равен нулю - «D/fragsuccess: статус аутентификации равен нулю», хотя я не понимаю, что происходит. Аутентификация не равна нулю, когда я отправляю фактический файл изображения за несколько мс до этого, но когда делается запрос на загрузку, auth.currentuser равен нулю? Почему это может быть и чем это может быть вызвано?
@stroopwafel Можете ли вы опубликовать свой полный код? В пропущенном коде может быть что-то, чего нам не хватает.
На самом деле предложения @AlexMamo исправили проблему. Я готов закрыть это дело. Алекс, если вы разместите свои комментарии в виде поста, я могу отметить как решение. Спасибо!
@stroopwafel Приятно слышать, что вы исправили проблему. Я только что ответил на вопрос.
Проблема в вашем коде присутствует из-за того, что ваш пользователь не проходит аутентификацию, когда вы пытаетесь прочитать файл из облачного хранилища. Чтобы иметь возможность прочитать файл, вы всегда должны убедиться, что ваше использование аутентифицировано в Firebase. При этом перед выполнением операций в облачном хранилище проверьте объект FirebaseUser на недействительность.
Ваши правила позволяют добавлять данные в облачное хранилище только пользователям, прошедшим проверку подлинности. Вы уверены, что ваш пользователь аутентифицирован перед загрузкой файла?