Auth не работает в FirebaseStorage Flutter - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь загрузить изображение в хранилище Firebase в приложении Flutter. Я получил сообщение об ошибке: у пользователя нет прав на загрузку. В моих Правилах хранения разрешено чтение и запись, когда auth != null. Я могу загрузить изображения из хранилища с помощью URL-адреса загрузки. Также я распечатываю текущего пользователя FirebaseAuth, и он установлен. Если я устанавливаю правила хранения Firebase, чтобы разрешить все (без аутентификации), это работает.

Нужно ли где-то явно передавать пользователя аутентификации? Аутентификация обрабатывается пакетом провайдера в приложении.

Ошибка:

E/StorageException(17300):  at com.google.firebase.storage.UploadTask.shouldContinue(com.google.firebase:firebase-storage@@17.0.0:309)
E/StorageException(17300):  at com.google.firebase.storage.UploadTask.run(com.google.firebase:firebase-storage@@17.0.0:226)
E/StorageException(17300):  at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(com.google.firebase:firebase-storage@@17.0.0:1106)
E/StorageException(17300):  at com.google.firebase.storage.StorageTask$$Lambda$10.run(Unknown Source:2)
E/StorageException(17300):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
E/StorageException(17300):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
E/StorageException(17300):  at java.lang.Thread.run(Thread.java:764)
E/StorageException(17300): Caused by: java.io.IOException: {  "error": {    "code": 403,    "message": "Permission denied. Could not perform this operation"  }}
E/StorageException(17300):  at com.google.firebase.storage.network.NetworkRequest.parseResponse(com.google.firebase:firebase-storage@@17.0.0:455)
E/StorageException(17300):  at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(com.google.firebase:firebase-storage@@17.0.0:435)
E/StorageException(17300):  at com.google.firebase.storage.network.NetworkRequest.processResponseStream(com.google.firebase:firebase-storage@@17.0.0:426)
E/StorageException(17300):  at com.google.firebase.storage.network.NetworkRequest.performRequest(com.google.firebase:firebase-storage@@17.0.0:280)
E/StorageException(17300):  at com.google.firebase.storage.network.NetworkRequest.performRequest(com.google.firebase:firebase-storage@@17.0.0:294)
E/StorageException(17300):  at com.google.firebase.storage.UploadTask.send(com.google.firebase:firebase-storage@@17.0.0:470)
E/StorageException(17300):  at com.google.firebase.storage.UploadTask.uploadChunk(com.google.firebase:firebase-storage@@17.0.0:429)
E/StorageException(17300):  at com.google.firebase.storage.UploadTask.run(com.google.firebase:firebase-storage@@17.0.0:225)
E/StorageException(17300):  ... 5 more

Код:

Future<void> changeProfilePicture(File _image, User user) async {
    print(await FirebaseAuth.instance.currentUser());
    final StorageReference _storageReference =
        FirebaseStorage().ref().child(user.id);
    final StorageUploadTask _uploadTask = _storageReference.putFile(_image);
    StorageTaskSnapshot snap = await _uploadTask.onComplete;
    String downloadUrl = await snap.ref.getDownloadURL();
    print(downloadUrl);
    user.setProfilePictureURL(downloadUrl);

    Firestore.instance
        .collection('users')
        .document(user.id)
        .setData(user.toMap());
  }

Правила хранения Firebase;

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if auth != null;
    }
  }
}

зависимости:

dependencies:
  flutter:
    sdk: flutter
  camera: ^0.5.4+2
  path_provider: ^1.3.0
  path: ^1.6.4
  geolocator: ^5.1.3
  firebase_core: ^0.4.0+9
  firebase_auth: ^0.14.0+5
  cloud_firestore: ^0.12.9+5
  firebase_storage: ^3.0.6
  provider: ^3.1.0
  intl: ^0.16.0

в соответствии со страницей ошибок Firebase означает, что код ошибки означает, что идентификатор отправителя отличается от идентификатора токена. Я пытался использовать разные учетные записи пользователей для одного и того же результата.

SENDER_ID_MISMATCH (код ошибки HTTP = 403) Идентифицированный идентификатор отправителя отличается от идентификатора отправителя для маркера регистрации.

...