即使在用户身份验证后,Android默认Firebase权限也被拒绝

时间:2016-08-06 05:51:35

标签: android json firebase firebase-realtime-database

用户登录并且会话处于活动状态后,由于权限被拒绝错误,无法读取/写入数据。规则是标准的:

   // 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 Database tree view from console

应用程序/ 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 Setup 2.5.2+

出于某种原因,我无法将我的graddle文件升级到最新的Firebase版本'com.google.firebase:firebase-core:9.4.0'依赖项。它编译错误“无法解决”。

2 个答案:

答案 0 :(得分:1)

好的,我所期待的问题已经与Firebase更新有关。请按照最新更新[当此答案发布时为9.4.0]并从旧版本迁移到最新版本。

Firebase update from 'com.firebase:firebase-client-android:x.x.x' to 'com.google.firebase:firebase-database:9.4.0'

如果您对graddle文件解析有问题,您应该更新:

  • Android支持存储库
  • Google Play服务
  • Google Repository

希望它会对你有所帮助。保持更新。

答案 1 :(得分:0)

按照下图中给出的这些值更改规则。那个规则对我有用!!!

enter image description here