簡體   English   中英

即使在用戶身份驗證后,Android默認Firebase權限也被拒絕

[英]Android default Firebase Permission denied even after user Authenticated

用戶登錄並且會話處於活動狀態后,由於權限被拒絕錯誤,無法讀取/寫入數據。 規則是標准的:

   // These rules require authentication
{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

FirebaseAuth工作正常,所有憑據都可以從根Firebase節點訪問,但沒有任何內容。

檢索實例沒有任何問題:

mAuth = FirebaseAuth.getInstance();

Firebase Auth(使用電子郵件和密碼方案)代碼:

 public void signIn(String email, String password) {
    mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (!task.isSuccessful()) {
                showAlert(Values.ERROR, Values.WRONG_EMAIL_OR_PASSWORD_ALERT);
            } else {
                changeStatus(FirebaseAuth.getInstance().getCurrentUser());
                startActivity(new Intent(mTab.getContext(), MainActivity.class));
            }
            mProgress.hide();
        }
    });
}

在設置Firebase上下文之前:

    Firebase.setAndroidContext(mTab.getContext());

即使在成功登錄后,由於權限失敗,我無法訪問我的數據庫:

    public void changeStatus(FirebaseUser user, String status) {
    Firebase.setAndroidContext(getContext());
    mStatusRef = new Firebase(Values.FIREBASE_ADDRESS + "/statuses/" + user.getUid() + "/");
    mStatusRef.setValue(status);
    }

要么

    public void setLastMessage(final MyViewHolder holder, String uid) {
    Firebase.setAndroidContext(mView.getContext());
    mMessageRef = new Firebase(Values.FIREBASE_ADDRESS + "/users/" + mUser.getUid() + "/chats/" + uid + "/message");
    mMessageRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            holder.lastMessage.setText(dataSnapshot.getValue().toString());
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
    }

控制台出錯:

W/RepoOperation: setValue at /statuses/ghTGuwjc4saAQqyJgoMONV2Rz483      failed: FirebaseError: Permission denied
W/SyncTree: Listen at /party failed: FirebaseError: Permission denied

我的JSON樹具有以下結構: 來自控制台的Firebase數據庫樹視圖

應用程序/ build.graddle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

defaultConfig {
    applicationId "GGG.GGG.com.GGG"
    minSdkVersion 19
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
}
}
repositories {
    maven {
        url "https://jitpack.io"
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'
    compile 'com.firebase:firebase-client-android:2.5.2+'
    compile 'com.google.firebase:firebase-auth:9.2.0'
    compile 'com.android.support:recyclerview-v7:23.1.1'
    compile 'com.android.support:cardview-v7:23.0.+'
    compile 'com.github.castorflex.smoothprogressbar:library:1.0.0'
    compile 'com.yalantis:phoenix:1.2.3'
    compile 'com.facebook.network.connectionclass:connectionclass:1.0.1'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.daimajia.easing:library:1.0.1@aar'
    compile 'com.daimajia.androidanimations:library:1.1.3@aar'
    compile 'com.roughike:swipe-selector:1.0.6'
    compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
}

apply plugin: 'com.google.gms.google-services'

我的應用程序包含MainActivity和ViewPager小部件。 但根據Firebase文檔,只要FirebaseAuth實例可以訪問,這意味着會話處於活動狀態(因此用戶通過身份驗證)。

也許我錯過了什么? 我曾多次嘗試閱讀Firebase文檔(一切都非常清晰易懂),但感覺我的問題在上下文中是獨一無二的。

我將規則更改為Public僅用於開發目的,但是在最終版本發布后我不能讓我的數據庫向所有人開放...

可能有什么問題?

我正在使用Firebase控制台和此Android設置指南:

Android Firebase設置2.5.2+

出於某種原因,我無法將我的graddle文件升級到最新的Firebase版本'com.google.firebase:firebase-core:9.4.0'依賴項。 它編譯錯誤“無法解決”。

好的,我所期待的問題已經與Firebase更新有關。 請按照最新更新[當此答案發布時為9.4.0]並從舊版本遷移到最新版本。

Firebase從“com.firebase:firebase-client-android:xxx”更新為“com.google.firebase:firebase-database:9.4.0”

如果你有解決graddle文件的問題,你應該更新你的:

  • Android支持存儲庫
  • Google Play服務
  • Google Repository

希望它會對你有所幫助。 保持更新。

通過下圖中給出的這些值更改規則。 那個規則對我有用!!!

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM