Ruudra Patel
Ruudra Patel

Reputation: 61

Platform Exception - User is not authenticated, please authenticate using Firebase Authentication and try again. (Flutter, Firebase)

Rules To Firebase Storage

rules_version = '2';

// service firebase.storage {
//   match /b/{bucket}/o {
//     match /{allPaths=**} {
//       allow read, write: if true;
//     }
//   }
// }
service firebase.storage {
  // Only a user can upload their file, but anyone can view it
  match /users/{userId}/{fileName} {
    allow read;
    allow write: if true;
  }
}

Login Code

Future loginUser() async {
    {
      auth.authStateChanges().listen((User user) {
        if (user == null) {
          //print('User is currently signed out!');
        }
      });
      isSignedIn = true;
      final user = await gSignIn.signIn();
      if (user == null) {
        isSignedIn = false;
        return;
      } else {
        final googleAuth = await user.authentication;

        final credential = GoogleAuthProvider.credential(
          accessToken: googleAuth.accessToken,
          idToken: googleAuth.idToken,
        );
        await auth.signInWithCredential(credential);
        print(credential);
        isSignedIn = false;
      }
    }
    // saveUserInfoToFireStore();
    // await gSignIn
    //     .signIn()
    //     .then((gSignInAccount) => controlSignIn(gSignInAccount));
    // Navigator.push(
    //   context,
    //   MaterialPageRoute(builder: (context) => HomePage()),
    // );
  }

Compress Image

String status = '';
  String imageUrl;
  bool isLoading;

  Future compressingImage() async {
    final tDirectory = await getTemporaryDirectory();
    final path = tDirectory.path;
    ImD.Image mImageFile = ImD.decodeImage(eImage.readAsBytesSync());
    final compressedImageFile = File('$path/img$postId.jpg')
      ..writeAsBytesSync(ImD.encodeJpg(mImageFile, quality: 99));
    setState(() {
      eImage = compressedImageFile;
    });
  }

Upload Photo to Firebase Storage

Future<String> uploadPhoto(mImageFile) async {
    await gCurrentUser.authentication;
    final StorageReference reference =
        FirebaseStorage.instance.ref().child("Event Banners");
    StorageUploadTask mStorageUploadTask =
        reference.child("post_$postId.jpg").putFile(mImageFile);
    StorageTaskSnapshot storageTaskSnapshot =
        await mStorageUploadTask.onComplete;
    String downloadUrl = await storageTaskSnapshot.ref.getDownloadURL(); //Getting error here
    return downloadUrl;
  }

Error Received: Storage Exception:

E/StorageException(13107): StorageException has occurred.
E/StorageException(13107): User is not authenticated, please authenticate using Firebase Authentication and try again.
E/StorageException(13107):  Code: -13020 HttpResult: 401
E/StorageException(13107): The server has terminated the upload session
E/StorageException(13107): java.io.IOException: The server has terminated the upload session
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.serverStateValid(UploadTask.java:331)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.shouldContinue(UploadTask.java:300)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.run(UploadTask.java:221)
E/StorageException(13107):  at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(StorageTask.java:1072)
E/StorageException(13107):  at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
E/StorageException(13107):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(13107):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(13107):  at java.lang.Thread.run(Thread.java:923)
E/StorageException(13107): Caused by: java.io.IOException: {  "error": {    "code": 401,    "message": "Firebase App Check token is invalid."  }}
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:434)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:451)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:442)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:286)
E/StorageException(13107):  at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:70)
E/StorageException(13107):  at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:62)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.sendWithRetry(UploadTask.java:467)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.beginResumableUpload(UploadTask.java:268)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.run(UploadTask.java:216)
E/StorageException(13107):  ... 5 more
E/StorageException(13107): StorageException has occurred.
E/StorageException(13107): User is not authenticated, please authenticate using Firebase Authentication and try again.
E/StorageException(13107):  Code: -13020 HttpResult: 401
E/StorageException(13107): The server has terminated the upload session
E/StorageException(13107): java.io.IOException: The server has terminated the upload session
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.serverStateValid(UploadTask.java:331)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.shouldContinue(UploadTask.java:300)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.run(UploadTask.java:221)
E/StorageException(13107):  at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(StorageTask.java:1072)
E/StorageException(13107):  at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
E/StorageException(13107):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(13107):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(13107):  at java.lang.Thread.run(Thread.java:923)
E/StorageException(13107): Caused by: java.io.IOException: {  "error": {    "code": 401,    "message": "Firebase App Check token is invalid."  }}
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:434)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:451)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:442)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:286)
E/StorageException(13107):  at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:70)
E/StorageException(13107):  at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:62)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.sendWithRetry(UploadTask.java:467)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.beginResumableUpload(UploadTask.java:268)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.run(UploadTask.java:216)
E/StorageException(13107):  ... 5 more
E/StorageException(13107): StorageException has occurred.
E/StorageException(13107): User is not authenticated, please authenticate using Firebase Authentication and try again.
E/StorageException(13107):  Code: -13020 HttpResult: 401
E/StorageException(13107): The server has terminated the upload session
E/StorageException(13107): java.io.IOException: The server has terminated the upload session
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.serverStateValid(UploadTask.java:331)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.shouldContinue(UploadTask.java:300)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.run(UploadTask.java:221)
E/StorageException(13107):  at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(StorageTask.java:1072)
E/StorageException(13107):  at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
E/StorageException(13107):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(13107):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(13107):  at java.lang.Thread.run(Thread.java:923)
E/StorageException(13107): Caused by: java.io.IOException: {  "error": {    "code": 401,    "message": "Firebase App Check token is invalid."  }}
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:434)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:451)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:442)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:286)
E/StorageException(13107):  at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:70)
E/StorageException(13107):  at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:62)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.sendWithRetry(UploadTask.java:467)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.beginResumableUpload(UploadTask.java:268)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.run(UploadTask.java:216)
E/StorageException(13107):  ... 5 more
E/StorageException(13107): StorageException has occurred.
E/StorageException(13107): User is not authenticated, please authenticate using Firebase Authentication and try again.
E/StorageException(13107):  Code: -13020 HttpResult: 401
E/StorageException(13107): The server has terminated the upload session
E/StorageException(13107): java.io.IOException: The server has terminated the upload session
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.serverStateValid(UploadTask.java:331)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.shouldContinue(UploadTask.java:300)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.run(UploadTask.java:221)
E/StorageException(13107):  at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(StorageTask.java:1072)
E/StorageException(13107):  at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
E/StorageException(13107):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(13107):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(13107):  at java.lang.Thread.run(Thread.java:923)
E/StorageException(13107): Caused by: java.io.IOException: {  "error": {    "code": 401,    "message": "Firebase App Check token is invalid."  }}
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:434)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:451)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:442)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:286)
E/StorageException(13107):  at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:70)
E/StorageException(13107):  at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:62)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.sendWithRetry(UploadTask.java:467)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.beginResumableUpload(UploadTask.java:268)
E/StorageException(13107):  at com.google.firebase.storage.UploadTask.run(UploadTask.java:216)
E/StorageException(13107):  ... 5 more
E/StorageException(13107): StorageException has occurred.
E/StorageException(13107): User is not authenticated, please authenticate using Firebase Authentication and try again.
E/StorageException(13107):  Code: -13020 HttpResult: 401
E/StorageException(13107): {  "error": {    "code": 401,    "message": "Firebase App Check token is invalid."  }}
E/StorageException(13107): java.io.IOException: {  "error": {    "code": 401,    "message": "Firebase App Check token is invalid."  }}
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:434)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:451)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:442)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
E/StorageException(13107):  at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:286)
E/StorageException(13107):  at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:70)
E/StorageException(13107):  at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:62)
E/StorageException(13107):  at com.google.firebase.storage.GetDownloadUrlTask.run(GetDownloadUrlTask.java:76)
E/StorageException(13107):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(13107):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(13107):  at java.lang.Thread.run(Thread.java:923)
D/ViewRootImpl[MainActivity](13107): windowFocusChanged hasFocus=false inTouchMode=true
W/vent_managemen(13107): Accessing hidden method Ldalvik/system/CloseGuard;->close()V (greylist,core-platform-api, linking, allowed)
Lost connection to device.
Exited (sigterm)

Error After Debugging

Upvotes: 3

Views: 2759

Answers (3)

Bill_The_Coder
Bill_The_Coder

Reputation: 2500

I was facing the same issue. After the constant work of two days, I came to know that in the debug mode, its important to give SHA1 debug key in firebase console of your project otherwise FirebaseStorage wouldn't allow you to upload files to Firebase storage no matters if you have already given release SHA1 or SHA-256 keys.

Upvotes: 2

sedatg
sedatg

Reputation: 51

I was dealing with appcheck issue. Let me share the method I run on my physical device. The issue of upload is important, the method used is important, I will share my own piece of code. Also, I think it is necessary to create a register and token in firebase, which is what I did.

appcheck safety register and manage-debug-tokens https://firebase.flutter.dev/docs/app-check/usage https://firebase.google.com/docs/app-check/manage-debug-tokens.png

my code:

 Future<String> _imageUpload(File imageFile, BuildContext context) async {
    final firebase_storage.FirebaseStorage storage =
        firebase_storage.FirebaseStorage.instance;

    Random rnd = Random();
    final String imgPath =
        'imgs/${rnd.nextInt(4000)}';

    firebase_storage.TaskSnapshot tasking =
        await storage.ref(imgPath).putFile(imageFile);

//alternative 1
    String url = await storage.ref(imgPath).getDownloadURL();
    print('url1 => $url');

//alternative 2
    String url2 = await tasking.ref.getDownloadURL();
    print('url2 => $url2');

    if (url != null) {
      print('uploaded => $url');
      return url;
    }
  }

Upvotes: 0

exploitr
exploitr

Reputation: 793

I also had the same problem (in Java-Android), I enabled Firebase App Check/SafetyNet and added verification related codes to the Application class, it started working normally.

    if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(getApplicationContext())
            == ConnectionResult.SUCCESS) {
        SafetyNet.getClient(this).attest((Build.DEVICE + System.currentTimeMillis()).getBytes(),
                DatabaseConstants.ADV_KEY)
                .addOnSuccessListener(
                        response -> Log.v("ATTEST", "SUCCESSFUL"))
                .addOnFailureListener(e -> {
                    if (e instanceof ApiException) {
                        // An error with the Google Play services API contains some
                        // additional details.
                        ApiException apiException = (ApiException) e;
                        // You can retrieve the status code using the
                        // apiException.getStatusCode() method.
                        Log.v("ATTEST", "ERROR" + apiException.getStatus().getStatusMessage());
                    } else {
                    }
                    Log.v("ATTEST", "ERROR");
                });

    } else {
        Toast.makeText(this, "Update Google Services", Toast.LENGTH_SHORT).show();
    }

    FirebaseApp.initializeApp(/*context=*/ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            SafetyNetAppCheckProviderFactory.getInstance());

Upvotes: 0

Related Questions