【问题标题】:Android default Firebase Permission denied even after user Authenticated即使用户经过身份验证,Android 默认 Firebase 权限也会被拒绝
【发布时间】:2016-08-06 05:51:35
【问题描述】:

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

   // 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

app/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 Docs,只要 FirebaseAuth 实例可访问,这意味着会话处于活动状态(因此用户已通过身份验证),这无关紧要。

也许我错过了什么?我尝试多次阅读 Firebase 文档(一切都非常清晰易懂),但感觉我的问题在上下文中是独一无二的。

我将规则更改为 Public 仅用于开发目的,但是我不能让我的数据库在最终版本发布后向所有人开放...

可能是什么问题?

我正在使用 Firebase 控制台和这个 Android 设置指南:

Android Firebase Setup 2.5.2+

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

【问题讨论】:

  • 请添加您的 firebaseauth 代码
  • 看不到minimal code that reproduces the problem,只能推测。
  • 感谢您的回复!立即添加详细信息
  • 现在尽我所能添加。有些东西告诉我这是 graddle 文件的问题,或者我正在使用过时的东西。当我尝试添加最新的编译 'com.google.firebase:firebase-core:9.4.0' 依赖项时,出现错误:“无法解析”。
  • 我也在最新的 unity firebase 4.2.1 上获得了这个,用于全新的应用安装 1. 身份验证状态已更改。通知 1 个听众。 2. 登录成功 3. Firebase.Database.DatabaseException: Firebase Database error: Permission denied

标签: android json firebase firebase-realtime-database


【解决方案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 存储库

希望对您有所帮助。保持更新。

【讨论】:

  • 那个升级解决了我关于 9.4.0 () 的问题
  • 很高兴它有帮助(y)
【解决方案2】:

通过下图中给出的这些值更改规则。那条规则对我有用!!!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-12-15
  • 2020-09-08
  • 1970-01-01
  • 2018-04-25
  • 2017-02-13
  • 2019-01-21
  • 1970-01-01
  • 2016-02-09
相关资源
最近更新 更多