平台异常 - 用户未通过身份验证,请使用 Firebase 身份验证进行身份验证,然后重试。 (颤振,Firebase)

时间:2021-07-01 09:37:07

标签: flutter dart firebase-authentication firebase-storage firebase-security

  • 实施了 Google 登录 - 完美运行
  • 用户已在 Firebase 中进行身份验证 - 在 Firebase 中签入
  • 在用户将特定图像添加到 Firebase 存储后显示用户未登录
  • Firebase 规则是公开的
  • 我不明白我是怎么得到这个错误的

Firebase 存储规则

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;
  }
}

登录代码

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()),
    // );
  }

压缩图片

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;
    });
  }

将照片上传到 Firebase 存储

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;
  }

收到错误:存储异常:

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

1 个答案:

答案 0 :(得分:0)

我也遇到了同样的问题(在Java-Android中),我启用了Firebase App Check/SafetyNet并将验证相关代码添加到Application类中,它开始正常工作。

    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());